LeetCode557(反转字符串2)

题目:

  给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
  示例:
    输入: “Let’s take LeetCode contest”
    输出: “s’teL ekat edoCteeL tsetnoc”

思路:

  利用双指针分别反转每个单词。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   public String reverseWords(String s) {
char[] c = s.toCharArray();
int l = 0 ;
int r = 0;
for(int i = 0;i < s.length();i++) {
if (c[i] == ' ') {
r = i - 1;
reverse(c, l, r);
l = i + 1;
}
if (i == s.length()-1) {
reverse(c, l, s.length()-1);
}
}
return new String(c);
}
public static void reverse(char[] c,int l,int r) {
while(l < r) {
c[l] ^= c[r];
c[r] ^= c[l];
c[l++] ^= c[r--];
}
}

复杂度分析及总结:

循环:

  时间复杂度:
    O(n)。
  空间复杂度:
    O(1)。