LeetCode557反转字符串中的单词3

83 阅读1分钟

🍀反转字符串中的单词

描述:

 # 给定一个字符串 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;
         }
     }
 }

测试一下!

image.png

大佬的代码:

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();
     }
 }

\