【发布时间】:2015-05-13 13:18:33
【问题描述】:
(C++) 给定 myString,我想检查 myString 是否包含子字符串。到目前为止,这是我所拥有的,但只有当字符串以子字符串开头时它才会返回 true。
bool find(string myString, string substring)
{
if(mystring.length() < substring.length())
{
return false;
}
if(mystring == substring)
{
return true;
}
for(int i = 0; i < substring.length() - 1 ; ++i)
{
if(mystring.at(i) == substring.at(i))
{
continue;
}
else
{
string string2 = mystring.substr(1, mystring.length() - 1);
return find(string2, substring);
}
return true;
}
return false;
}
这个函数有什么问题?
【问题讨论】:
-
虽然这样做很有趣,但您会获取大量字符串的值副本。您可以在没有单个字符串副本的情况下执行此操作,并且在 O(N) 中,即使您想搜索多个匹配项。
-
我的意思是,为什么这个功能不起作用?
-
我知道。我太老了,无法逐步执行此代码,但是 (i)
substr是从零开始的,并且 (ii) 你缺少return。 -
当您递归检查子字符串比字符串少 1 个字符时,您只检查删除最左边字符的子字符串,而不检查删除最右边字符的其他可能子字符串。
-
我该如何解决?我不认为你可以做双重递归......
标签: c++ string recursion substring