🍀反转字符串中的单词
描述:
# 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
1 <= s.length <= 5 * 104
s 包含可打印的 ASCII 字符。
s 不包含任何开头或结尾空格。
s 里 至少 有一个词。
s 中的所有单词都用一个空格隔开。
思考:
空格不动,只有单词反转,那就遇到空格标记好单词的起始和结束位置反转就好了。其实也可以用栈做,不过想来一下感觉好麻烦。
实现:
class Solution {
public String reverseWords(String s) {
char[] chars = s.toCharArray();
int begin = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == ' '){
reserve(chars, begin, i - 1);
begin = i + 1;
}
}
return new String(chars);
}
public static void reserve(char[] chars, int left, int right){
char c;
while (left < right){
c = chars[left];
chars[left++] = chars[right];
chars[right--] = c;
}
}
}
测试一下!
大佬的代码:
java的方法组合在一起确实很简单。
class Solution {
public String reverseWords(String s) {
String[] strs = s.split(" ");
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < strs.length; i++) {
buffer.append(new StringBuffer(strs[i]).reverse().toString());
buffer.append(" ");
}
return buffer.toString().trim();
}
}
\