Θ(n+m)
? n
的大小为i_StringForSearch
,m
的大小为i_SubStringToFind
。
2.是否有任何程序建议检查给定代码的时间复杂度,我更喜欢一个公认的免费工具。
谢谢
public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
{
int strForSearchIndex = 0;
int subStrToFindIndex = 0;
boolean endOfStringToSearch = false;
boolean foundSubString = false;
boolean isThereASequenceOfMatching = false;
while(!endOfStringToSearch && !foundSubString)
{
if(strForSearchIndex == i_StringForSearch.length())
{
endOfStringToSearch = true;
}
else if(i_StringForSearch.charAt(strForSearchIndex) == i_SubStringToFind.charAt(subStrToFindIndex))
{
isThereASequenceOfMatching = true;
if(subStrToFindIndex == i_SubStringToFind.length() -1 )
{
foundSubString = true;
}
subStrToFindIndex++;
strForSearchIndex++;
}
else if(i_StringForSearch.charAt(strForSearchIndex) != i_SubStringToFind.charAt(subStrToFindIndex))
{
if(isThereASequenceOfMatching)
{
subStrToFindIndex = 0;
isThereASequenceOfMatching = false;
}
strForSearchIndex++;
}
}
return foundSubString;
}
答案 0 :(得分:1)
回答你的问题:是的,算法是O(n+m)
。每
迭代次数增加strForSearchIndex
,因此最多n
迭代。 [这是假设i_StringForSearch.length()
已完成
在O(1)
,这通常是真的。
isSubstring("aaab","aab") == false
您可能希望查看Knuth Morris Pratt algorithm和/或Rabin-Karp algorithm和/或Aho-Corasick Algorithm