题目大意是给出一串string,把里面每个单词的字母顺序颠倒过来,保留原来单词和空格的位置。
那么思路是把string转成char数组,遍历数组,遇到空格就停下,用两个游标i和j标记一个单词的范围,然后把范围内的数组元素颠倒一下,就可以得到我们要的结果。代码如下:
class Solution {
public String reverseWords(String s) {
char[] ca = s.toCharArray();
for (int i = 0; i < ca.length; i++) {
if (ca[i] != ' ') { // when i is a non-space
int j = i;
while (j + 1 < ca.length && ca[j + 1] != ' ') { j++; } // move j to the end of the word
reverse(ca, i, j);
i = j;
}
}
return new String(ca);
}
private void reverse(char[] ca, int i, int j) {
for (; i < j; i++, j--) {
char tmp = ca[i];
ca[i] = ca[j];
ca[j] = tmp;
}
}
}