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--;
            }
        }
    }
    
  • 相关阅读:
    【AtCoder】ARC097 (C
    【51nod】1123 X^A Mod B (任意模数的K次剩余)
    【洛谷】P4207 [NOI2005]月下柠檬树
    【POJ】2454.Jersey Politics
    【POJ】2069.Super Star
    【POJ】2420.A Star not a Tree?(模拟退火)
    【POJ】1026.Cipher
    【POJ】3270.Cow Sorting
    【POJ】1286.Necklace of Beads
    【POJ】1067.取石子游戏
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13584647.html
Copyright © 2011-2022 走看看