LeetCode第557题 反转字符串中的单词 III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

思路:
简单题
1.强行遍历逆置
2.正则,分割字符串,逆置

 1 class Solution557 {
 2 
 3   public String reverseWords(String s) {
 4     char[] arr = s.toCharArray();
 5     int end = 0;
 6     int start = 0;
 7     for (end = 0; end < arr.length; end++) {
 8       if (end == arr.length - 1 || arr[end + 1] == ' ') {
 9         reserve(arr, start, end);
10         start = end + 2;
11       }
12     }
13     return new String(arr);
14   }
15 
16   private void reserve(char[] arr, int start, int end) {
17     int len = end - start + 1;
18     for (int i = 0; i < (len >> 1); i++) {
19       char temp = arr[start + i];
20       arr[start + i] = arr[end - i];
21       arr[end - i] = temp;
22     }
23   }
24 
25 
26   public String reverseWords_2(String s) {
27     StringBuilder res = new StringBuilder();
28     String[] subs = s.split(" ");
29     for (String sub : subs) {
30       res.append(new StringBuilder(sub).reverse()).append(" ");
31     }
32     res.deleteCharAt(res.length() - 1);
33     return res.toString();
34 
35   }
36 }

猜你喜欢

转载自www.cnblogs.com/rainbow-/p/10397324.html