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

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

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

使用额外空间

  • 从第一个非空格位置开始记录单词的长度len,直到下一个空格为止i为止
  • 将[i-len, i-1]范围内的单词进行翻转

执行用时:10 ms, 在所有 Java 提交中击败了35.30%的用户
内存消耗:40.2 MB, 在所有 Java 提交中击败了73.04%的用户

class Solution {
    public String reverseWords(String s) {
        if(s==null || s.length()==0) {
            return s;
        }

        StringBuffer strBuffer = new StringBuffer();
        strBuffer.append(s);

        int len = 0;
        int left = 0, right = 0;
        for(int i=0; i<s.length(); i++) {
            if(s.charAt(i)!=' '){
                len++;
            }
            else if(i>0 && s.charAt(i)==' ') {
                /*翻转*/
                left = i-len;
                right = i-1;
                swap(strBuffer, left, right);
                len=0;
            }
        }
        /*将最后一个单词翻转*/
        if(s.charAt(s.length()-1)!=' ') {
            swap(strBuffer, s.length()-len, s.length()-1);
        }

        return strBuffer.toString();
    }
    
    /*翻转strBuffer中[left, right]范围内的字符串*/
    public void swap(StringBuffer strBuffer, int left, int right) {
        while(left<right) {
            char tmp = strBuffer.charAt(left);
            strBuffer.setCharAt(left,strBuffer.charAt(right));
            strBuffer.setCharAt(right,tmp);
            left++;right--;
        }
    }
}
原文地址:https://www.cnblogs.com/CodeSPA/p/13584647.html