【发布时间】:2019-12-13 06:00:55
【问题描述】:
我正在尝试解决 Leetcode 的“Reverse Words in a String III”。我想出了一个解决方案,但我认为我的时间复杂度是 O(n^2)。我的代码能够通过所有测试用例。我的代码如下:
class Solution {
public String reverseWords(String s) {
if(s.isEmpty())
return "";
StringBuilder result = new StringBuilder();
String[] str = s.split("\\s+");
for(String s1:str){
char[] c1 = reverseChar(s1);
result.append(c1).append(" ");
}
return result.toString().trim();
}
public char[] reverseChar(String s){
char[] c = s.toCharArray();
int i = 0;
int j = c.length-1;
while(i<j){
char temp = c[i];
c[i] = c[j];
c[j] = temp;
j--;
i++;
}
return c;
}
}
【问题讨论】:
-
我想说它是 O(n*m) 复杂度,其中 n 是单词数,m 是字符串的长度。
-
如果不将其拆分成单词,您认为复杂度会是多少? (即反转整个字符串)您认为将其拆分为单词的复杂性是多少?哪个最高?
-
您可以通过使用
StringBuilder#reverse而不是编写char[] reverseChar(String s)方法来减少执行时间。 -
这只是 O(n),因为您只遍历每个字符一次
-
@Luggi Mendoza,为什么你认为 StringBuilder#reverse 会降低时间复杂度?
标签: java string stringbuilder