zoukankan      html  css  js  c++  java
  • 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--;
            }
        }
    }
    
  • 相关阅读:
    第09组 Alpha事后诸葛亮
    第09组 Alpha冲刺(4/4)
    第09组 Alpha冲刺(3/4)
    第09组 Alpha冲刺(2/4)
    第09组 Alpha冲刺(1/4)
    机器学习第二次作业
    机器学习第一次作业
    机器学习第一次个人作业
    第04组 Beta冲刺(4/4)
    第04组 Beta冲刺(3/4)
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13584647.html
Copyright © 2011-2022 走看看