zoukankan      html  css  js  c++  java
  • LeetCode 557. Reverse Words in a String III

    Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

    Example 1:

    Input: "Let's take LeetCode contest"
    Output: "s'teL ekat edoCteeL tsetnoc"
    

    Note: In the string, each word is separated by single space and there will not be any extra space in the string.

    first:

    import java.util.Stack;
    
    class Solution {
        public String reverseWords(String s) {
            Stack<Character> stack = new Stack<Character>();
            char[] array = s.toCharArray();
            //char[] output = new char[array.length];
            //ArrayList<Character> output = new ArrayList<Character>();
            StringBuilder sb = new StringBuilder();
            for(char c : array){
                if(c!=' '){
                    stack.push(c);
                }else{
                    while(!stack.empty()){
                        sb.append(stack.pop());
                    }
                    sb.append(' ');
                }
            }
            
            //Character[] outputArray = output.toArray(new Character[output.size()]);
            return sb.toString();
        }
    }

    result:

    Submission Result: Wrong Answer 
    Input: "Let's take LeetCode contest"
    Output: "s'teL ekat edoCteeL "
    Expected: "s'teL ekat edoCteeL tsetnoc"

    second:

    import java.util.Stack;
    
    class Solution {
        public String reverseWords(String s) {
            Stack<Character> stack = new Stack<Character>();
            char[] array = s.toCharArray();
            //char[] output = new char[array.length];
            //ArrayList<Character> output = new ArrayList<Character>();
            StringBuilder sb = new StringBuilder();
            for(char c : array){
                if(c!=' '){
                    stack.push(c);
                }else{
                    while(!stack.empty()){
                        sb.append(stack.pop());
                    }
                    sb.append(' ');
                }
            }
            
            while(!stack.empty()){
                sb.append(stack.pop());
            }
    
            
            //Character[] outputArray = output.toArray(new Character[output.size()]);
            return sb.toString();
        }
    }

    result:

    re-try:

    import java.util.Stack;
    //import java.util.Vector;
    
    class Solution {
        public String reverseWords(String s) {
            Stack<Character> stack = new Stack<Character>();
            char[] array = s.toCharArray();
            char[] output = new char[array.length];
            
            int endPointer = 0;
            for(char c : array){
                if(c!=' '){
                    stack.push(c);
                }else{
                    int size =stack.size();
                    for(int i=0;i<size;i++){
                        output[endPointer+i]=stack.pop();
                    }
                    output[endPointer+stack.size()+1] = ' ';
                    endPointer +=stack.size()+1;
                    
                }
            }
            
            while(!stack.empty()){
                output[endPointer]=stack.pop();
                endPointer++;
            }
    
            
            //Character[] outputArray = output.toArray(new Character[output.size()]);
            return new String(output);
        }
    }

    result:

    试着从StringBuilder和数组的角度去优化,但造成代码太复杂,不是一个好的选择。

    solution里的第1种方法:

    public class Solution {
        public String reverseWords(String s) {
            String words[] = s.split(" ");
            StringBuilder res=new StringBuilder();
            for (String word: words)
                res.append(new StringBuffer(word).reverse().toString() + " ");
            return res.toString().trim();
        }
    }

     result:

    solution里的第2种第3种方法

    比第一种慢。

    conclusion:

    很奇怪参考答案里的方法,最快的也才是50%+!另外感觉Stack比较慢!

    还需要注意的是,要熟悉String和StringBuffer的方法,比如String.split和StringBuffer.reverse。

  • 相关阅读:
    天地图专题六:复杂操作,天地图上标注点的连线以及模拟点击事件
    天地图专题五:在天地图上绘制电子区域并保存数据
    天地图专题四:在天地图上显示运行轨迹
    天地图专题三:根据标注点的范围确定天地图的中心点和缩放级别
    天地图专题二:在天地图上循环显示标注点以及悬停显示信息窗口
    天地图专题一:加载天地图
    从百度地图批量获取中国县级以上行政区划边界坐标
    【百度地图API】如何获取行政区域的边界? (转载)
    高德地图api之location定位
    url中的空格
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8947949.html
Copyright © 2011-2022 走看看