1.题目
Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc"
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
翻译:给一个字符串,你需要把句子中的每一个单词进行逆转,并且保留空白符和原始单词顺序。
注意:在这个字符串里,每个单词只被一个空白符分隔,在字符串中不会有多余的空格。
2.思路
关于字符串逆转、拼接,首先想到StringBuilder,一个res用户拼接逆转单词和空格符,一个temp用于记录需要被逆转的单个单词。遍历整个字符串:
①遇到空格,这说明前面有一个单词,将该单词temp逆转后拼接到res中,再接一个空白符,清空temp.
②遇到非空格,将该字符拼接到temp后。
③最后一个单词后面,不会有空格。需要再一次将temp逆转后拼接到res后。
最后将res转为字符串格式,返回。
3.算法
public String reverseWords(String s) {
int len=s.length();
StringBuilder temp=new StringBuilder();
StringBuilder res=new StringBuilder();
for(int i=0;i<len;i++){
if(s.charAt(i)==' '){
res.append(temp.reverse()).append(' ');
temp.delete(0,temp.length());
}else{
temp.append(s.charAt(i));
}
}
res.append(temp.reverse());
return res.toString();
}
4.总结
StringBuilder很好用,记住用法。
StringBuilder sb=new StringBuilder();
//or StringBuilder sb=new StringBuilder("abc");
sb.append("xyz").append("xyz");
sb.reverse();
String s= sb.toString();
sb.delete(0,sb.length());