题目要求
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
- 示例1:
- 输入:“Let’s take LeetCode contest”
- 输出:“s’teL ekat edoCteeL tsetnoc”
- 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
核心思想
将字符串以“ ”分隔,将每个单词进行反转,再进行整合。
完整代码如下
/**
* 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
* 示例1:
* 输入:“Let's take LeetCode contest”
* 输出:“s'teL ekat edoCteeL tsetnoc”
* 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
*/
public class Solution {
public StringBuffer reverseWords(String s) {
StringBuffer newStr = new StringBuffer();
String[] list = s.split(" ");
for(int i = 0; i < list.length - 1; i++) {
newStr.append(reverseString(list[i]) + " ");
}
newStr.append(reverseString(list[list.length - 1]));
return newStr;
}
//定义一个翻转函数用来反转单个单词
public String reverseString(String s) {
char[] strArrays = s.toCharArray();
int i = 0;
int j = strArrays.length - 1;
while(i < j) {
char temp = strArrays[i];
strArrays[i] = strArrays[j];
strArrays[j] = temp;
i++;
j--;
}
return new String(strArrays);
}
public static void main(String[] args) {
Solution sl = new Solution();
System.out.println(sl.reverseWords("Let's take LeetCode contest"));
}
}
补充
这里对String,StringBuffer,以及StringBuilder做区别。
- 以运行速度来区别,StringBuilder>StringBuffer>String
- String 为字符串常量,而StringBuilder和StringBuffer为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
- StringBuilder是线程不安全的,StringBuffer是线程安全的