给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/description/
由于没注意到“在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。”这个说明。写的这个方法可以有任意个数量的空格,不过速度还好并不慢。
class Solution {
public String reverseWords(String s) {
char[] cs = s.toCharArray();
//初始化单词左索引
int i = 0;
//单词右索引
int j;
while (i < cs.length) {
//遍历寻找第一个单词的开头
while (i < cs.length && (cs[i] == ' ' || (i != 0 && cs[i - 1] != ' '))) {
i++;
}
j = i;
//由第一个单词的开头寻找单词结尾
while (j < cs.length - 1 && cs[j + 1] != ' ') {
j++;
}
//单词倒序
for (int m = i, n = j; m < n; m++, n--) {
char temp = cs[m];
cs[m] = cs[n];
cs[n] = temp;
}
//下一个单词
i = j + 1;
}
return String.valueOf(cs);
}
}