给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
方法一:标记每个单词的左右边界再翻转,找到第一个单词的左边界,然后找右边界,找到的同时,下一个单词的左边界也确定了,因为单词间只有一个空格。
class Solution {
public String reverseWords(String s) {
if(s.length() == 0) return "";
char[] ch = s.toCharArray();
int L = 0;
while(ch[L] == ' ') L++;
for(int i = 0; i < ch.length; i++){
if(ch[i] == ' '){
swap(ch, L, i - 1);
L = i + 1;
}
else if(i == ch.length - 1)
swap(ch, L, i);
}
return new String(ch);
}
private void swap(char[] ch, int L, int R){
while(L < R){
ch[L] ^= ch[R];
ch[R] ^= ch[L];
ch[L++] ^= ch[R--];
}
}
}
方法二:
class Solution {
public String reverseWords(String s) {
String words[] = s.split(" ");
StringBuilder res = new StringBuilder();
for(String word : words)
res.append(new StringBuffer(word).reverse().toString() + " ");
return res.toString().trim();
}
}