《LeetCode力扣练习》代码随想录——字符串(翻转字符串里的单词—Java)
刷题思路来源于 代码随想录
151. 反转字符串中的单词
-
双指针
class Solution { public String reverseWords(String s) { char[] result=s.toCharArray(); result=removeSpace(result); reverse(result,0,result.length-1); reverseEachWord(result); return new String(result); } private char[] removeSpace(char[] chs){ int slow=0; for(int fast=0;fast<chs.length;fast++){ if(chs[fast]!=' '){ if(slow!=0){ chs[slow++]=' '; } while(fast<chs.length&&chs[fast]!=' '){ chs[slow++]=chs[fast++]; } } } return Arrays.copyOfRange(chs,0,slow); } private void reverse(char[] chs,int left,int right){ while(left<right){ chs[left]^=chs[right]; chs[right]^=chs[left]; chs[left]^=chs[right]; left++; right--; } } private void reverseEachWord(char[] chs){ int left=0; for(int right=0;right<chs.length;right++){ if(chs[right]==' '){ reverse(chs,left,right-1); left=right+1; } } reverse(chs,left,chs.length-1); } }