给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc"
提示:
- 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
由于java规定了字符串String是不可变字符数组,String底层使用 final 修饰的字符数组,所以无法避免空间的开销。
首先通过split()方法以空格分割字符串,得到字符串数组,然后对每个字符串进行翻转,并添加空格,最后使用trim()函数消去首尾的空格。
class Solution {
public String reverseWords(String s) {
int n = s.length();
StringBuffer sb = new StringBuffer();
for(String str : s.split(" ")){
str = reverseString(str);
sb.append(str);
sb.append(" ");
}
return sb.toString().trim();
}
private String reverseString(String str){
int n = str.length();
char[] arr = str.toCharArray();
int i = 0, j = n - 1;
while(i < j){
char c = arr[i];
arr[i++] = arr[j];
arr[j--] = c;
}
return String.valueOf(arr);
}
}
也可以偷懒使用StringBuffer中的reverse()方法
class Solution {
public String reverseWords(String s) {
int n = s.length();
StringBuffer sb = new StringBuffer();
for(String str : s.split(" ")){
sb.append(new StringBuffer(str).reverse().toString());
sb.append(" ");
}
return sb.toString().trim();
}
}



