通过万岁!!!
- 题目:字符串中的单词用一个空格进行拆分,并且没有收尾空格,需要把里面的单词全部反转过来。空格不变,然后输出反转之后的字符串。
- 思路:这里其实跟344题基本一样,我们需要做的就是找到两个空格之间的部分。我这里使用了四个指针,前两个用来定位两个空格,然后后两个用来进行字符的转换。
- 技巧:双指针,只不过这里用到了两组双指针。并且使用StringBuilder类型,以及在获取字符时,尽量使用String.charAt(i)进行获取。
java代码
class Solution {
public String reverseWords(String s) {
// 需要4个指针
int begin = 0, end = 0, l, r;
char c;
StringBuilder sb = new StringBuilder(s);
while (end <= s.length()) {
if (end == s.length() || s.charAt(end) == ' ') {// end指向最后一个,或者指向空,这两个顺序不能反了
l = begin;
r = end - 1;
while (l < r) {
c = s.charAt(l);
sb.setCharAt(l++, s.charAt(r));
sb.setCharAt(r--, c);
}
begin = ++end;
} else {
++end;
continue;
}
}
return sb.toString();
}
}
- 总结:题目相对简单,这里需要注意,我们在获取字符的时候,尽量用String.charAt(i),你要是用StringBuilder的话,时间复杂度会高,主要原因应该是String是在常量区的。