为什么c ++的实现string::find()不使用KMP算法(并且不运行O(N + M))并运行O(N * M)?这是在C++ 0x中纠正的吗?如果当前查找的复杂性不是O(N * M),那是什么?
PS:对不起,我的意思是 O(N * M)
那么在gcc中实现了什么算法?是KMP吗?如果没有,为什么?我测试了它,运行时间表明它运行了string::find()
我的C#代码中有以下方法:
/// <summary>
/// Removes the first (leftmost) occurence of a <paramref name="substring"/> from a <paramref name="string"/>.
/// </summary>
/// <param name="string">The string to remove the <paramref name="substring"/> from. Cannot be <c>null</c>.</param>
/// <param name="substring">The substring to look for and remove from the <paramref name="string"/>. Cannot be <c>null</c>.</param>
/// <returns>
/// The rest of the <paramref name="string"/>, after the first (leftmost) occurence of the <paramref name="substring"/> in it (if any) has been removed.
/// </returns>
/// <remarks>
/// <list type="bullet"> …Run Code Online (Sandbox Code Playgroud) 我想获得字符串中子字符串的开始和结束位置.示例:在字符串"嗨,这是我的名字"; 如果我提供字符串"this",我想知道起始索引是4,结束索引是7.
我发现了几个链接,包括这个链接:
Swift:获取字符串 a-substring-in-a-string中子字符串的起始索引
但它在swift 3中不起作用,因为该方法现在称为范围.
我现在用这个:
let range = mystring.range(of: "StringSearch")?.lowerBound
Run Code Online (Sandbox Code Playgroud)
返回此
Swift.String.UnicodeScalarView.Index(_position: 15), _countUTF16: 1))
Run Code Online (Sandbox Code Playgroud)
我无法获得整数的位置,因为这是一个索引.
总之,我想在一个int类型的变量中使用位置,在本例中为15.
谁能帮我?
感谢大家.
我试图找到以下模式:
不知道可能发生的任何模式.
例如:
'ell', 'the b', 'y '.'the boy fell by the bell'.使用双for循环,它可以非常低效地强制使用:
ArrayList<String> patternsList = new ArrayList<>();
int length = string.length();
for (int i = 0; i < length; i++) {
int limit = (length - i) / 2;
for (int j = limit; j >= 1; j--) {
int candidateEndIndex = i + j;
String candidate = string.substring(i, candidateEndIndex);
if(candidate.length() <= 1) {
continue;
}
if (string.substring(candidateEndIndex).contains(candidate)) …Run Code Online (Sandbox Code Playgroud) 给你一个字符串和一个字符串数组.如何快速检查,如果这个字符串可以通过连接数组中的一些字符串来构建?
这是一个理论问题,出于实际原因我不需要它.但我想知道,如果有一些好的算法.
编辑 阅读一些我已经注意到的答案,这可能是NP-Complete问题.即使找到字符串的子集,它们将具有相同的长度,作为给定的字符串也是经典的子集求和问题.
所以我想这没有简单的答案.
编辑
现在看来,它毕竟不是NP-Complete问题.那更酷:-)
编辑
我想出了一个通过一些测试的解决方案:
def can_build_from_substrings(string, substrings):
prefixes = [True] + [False] * (len(string) - 1)
while True:
old = list(prefixes)
for s in substrings:
for index, is_set in enumerate(prefixes):
if is_set and string[index:].startswith(s):
if string[index:] == s:
return True
prefixes[index + len(s)] = True
if old == prefixes: # nothing has changed in this iteration
return False
Run Code Online (Sandbox Code Playgroud)
我相信时间是O(n * m^3),n长度substrings和m长度在哪里string.你怎么看?
我有字符串叫:
abc.out
def.out
Run Code Online (Sandbox Code Playgroud)
如何删除子字符串
.OUT
在这些字符串?
我应该使用什么命令?(伯恩贝壳)
我正在使用NSString,我想得到一个包含我的字符串的前20个字符的子字符串.我怎样才能做到这一点?
你好伙伴们!我正在尝试创建一个程序,以尽可能快地检测字符串中是否有多个单词,如果是,则执行一个行为.最好,我希望它能够检测这些单词的顺序,但只有这样才能快速完成.到目前为止,这就是我所做的:
if (input.contains("adsf") && input.contains("qwer")) {
execute();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,为多个单词执行此操作会变得很烦人.这是唯一的方法还是有更好的方法来检测多个子串?有没有办法检测订单?
在Objective-C我用过:
[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
Run Code Online (Sandbox Code Playgroud)
但现在NSBackWardsSearch似乎不存在.任何人都可以提供Swift的等效代码吗?
如果可能的话,我希望能够在整个字符串中找到字符编号.所以在上面的例子中它将返回3.
我想替换字符串中第n个子串的出现.
必须有一些与我想做的事情相同的东西
mystring.replace("substring", 2nd)
实现这一目标的最简单,最恐怖的方法是什么?
为什么不重复:我不想使用正则表达式这种方法,我发现的类似问题的大多数答案只是正则表达式剥离或真正复杂的功能.我真的希望尽可能简单而不是正则表达式解决方案.