我已經寫下面的代碼來查找給定的字符數組是否是主數組的子字符串。 請說出以下代碼的最佳情況和最壞情況的複雜順序。什麼是下面算法的複雜性順序查找給定字符串的子字符串
我覺得這是非常有效的O(mainstring.lenth-substring.length)算法最複雜的算法。
public class SubstringOfString {
public static boolean isSubstring (char[] main , char[] sub){
int base=0 ;
int i=0;
while(i<sub.length){
if(sub[i]!=main[base] && i >0){
base=base-i;
if (base>main.length-sub.length){
System.out.println("not found");
return false;
}
}
else {
i++;base++;
}
}
if (i==sub.length){
System.out.println("found at"+(base-sub.length));
return true;
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] main = "i am hello as hello well".toCharArray();
char[] sub="hello".toCharArray();
SubstringOfString.isSubstring(main,sub);
}
}
我不這麼認爲,因爲你可以給它兩個非常長,相同的字符串。它仍然會檢查這些字符串的每個字符。另外,這個算法不適用於main =「aaab」和sub =「aab」嗎? – guest 2014-09-12 20:41:16
[請參閱此處](http://stackoverflow.com/questions/14615264/big-o-analysis-of-a-sub-string-of-string-algorithm-does-onlogn-simplify)與大O分析相關這個話題。我實際上並不相信你可以得到n的大O,除非在字符串中使用單個字符。 – Compass 2014-09-12 20:43:10
@guest這是否適用於main =「aaab」和sub =「aab」 – 2014-09-12 21:10:58