给定一个字符串 s
,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
class Solution {
public String reverseWords(String s) {
StringBuffer ret = new StringBuffer();
int length = s.length();
int i = 0;
while(i < length){
int start = i;
while(i<length && s.charAt(i) != ' '){
i++;
}
for(int pos = start; pos < i; pos++){
ret.append(s.charAt(start + i - 1 - pos));
}
while(i<length && s.charAt(i) == ' '){
i++;
ret.append(' ');
}
}
return ret.toString();
}
}
思路:
开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就能得到翻转后的结果。
如果是用C语言来写很简单,当判断到是 ' '的时候 直接交换单词的首尾位置即可!
start是用来记录当前的字符串中的单词的起始位置;(是会随着i的变化而变化的)
pos也是用来存放当前单词的开始位置,用来遍历当前单词;
图解: