【发布时间】:2015-06-21 02:18:45
【问题描述】:
我有一个蛮力解决方案,可以在 O(n^2) 时间内计算输入字符串中的所有子字符串。当我的输入字符串很长时,它需要很长时间。
我们如何在 O(n) 时间内找到所有可能的子字符串?
我只查找子字符串中第一个和最后一个字符相同的所有子字符串的计数。如您所见,我只在下面的代码中从函数返回计数。我想在 O(n) 时间内完成
我的蛮力解决方案:
// I am calculating count of all substrings where first and last substring character are equal
public class Solution {
public static void main(String[] args) {
String inputString = "ababaca";
System.out.println(findSubstringByBruteForcce(inputString, inputString.length()));
}
private static long findSubstringByBruteForcce(String inputString, int length) {
long count = 0;
for (int i = 0; i < length; i++) {
for (int j = 1; j <= length - i; j++) {
String str = inputString.substring(i, i + j);
if(str.length() == 1){
count = count + 1;
}else {
if(str.substring(0, 1).equals(str.substring(str.length() - 1, str.length()))){
count = count + 1;
}
}
}
}
return count;
}
}
如何优化上述解决方案并在 O(N) 时间内找到答案?输入字符串可能非常大(大约 10^6 长度)并且蛮力运行大约需要 20 秒。我希望最大运行时间低于 2 秒。
【问题讨论】:
-
您是在寻找实际的子串还是子串计数?您是在查找所有子字符串(包括重复项)还是仅查找唯一子字符串?
-
我只查找子字符串中第一个和最后一个字符相同的所有子字符串的计数。如您所见,我只从函数返回计数。
-
我投票结束这个问题,因为这是一个正在进行的编程竞赛。
标签: java string algorithm substring