问题是通过迭代子字符串n次来确定是否可以从子字符串表示特定字符串。
例如,字符串"abcabcabc"
可以通过迭代子字符串"abc"
来表示。
我提出了这个Java解决方案
public static boolean canForm (String str) {
if(str.isEmpty()||str.length()==1) return true;
int end;
if (str.length()%2==0) {
end = str.length()/2;
} else {
end = (str.length()-1)/2;
}
for (int i=1; i<=end; i++) {
String s = str.substring(0,i);
String compare = "";
while (compare.length()<str.length()) {
compare += s;
}
if (compare.equals(str)) return true;
}
return false;
}
问题的一个条件是解决方案是O(n)。我得出的结论是O(n),但我不确定我的解决方案是否真的是O(n),或者实际上是O(n ^ 2)以及为什么。
答案 0 :(得分:0)
你的程序在O(n ^ 2)中运行,其中n与字符串的长度成比例。您的代码有一个while循环,它在一个迭代n次的for循环中迭代n次。 因此,程序的顺序是O(n * n)= O(n ^ 2)。