Leetcode 557.反转字符串中的单词III
反转字符串中的单词III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
实现思路:
刚看题目心想直接用String.split会不会更容易些,不过这样就失去了这个算法的意义了。还是采用最原始的方法,先遍历循环查找' '字符,分别获取单个单词的左边和右边的位置,此时已基本实现了单词的定位。但是有个问题,就是最后一个单词后面是没有' '这个的,因此里面反转单词的判定除了校验' '之外,还在最后一次循环的时候,依然计算下标,进行单词的反转。
1 public class Solution { 2 public String reverseWords(String str) { 3 char[] buffer = str.toCharArray(); 4 int length = buffer.length; 5 int left = 0, right = 0; 6 boolean last; 7 for (int i = 0; i < length; i++) { 8 last = i == length - 1; 9 if (buffer[i] == ' ' || last) { 10 left = right; 11 right = i - (last ? 0 : 1); 12 for (; left < right; left++, right--) { 13 char temp = buffer[left]; 14 buffer[left] = buffer[right]; 15 buffer[right] = temp; 16 } 17 right = i + 1; 18 } 19 } 20 return new String(buffer); 21 } 22 }