• 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。

  • 相关阅读:
    mongodb实验
    hbase实验
    oracle数据库的安装
    3ds的fbi无线传输
    2018年春阅读计划---阅读笔记6
    2018年春阅读计划---阅读笔记5
    2018年春阅读计划---阅读笔记4
    php写一个简单的计算器
    2018年春阅读计划---阅读笔记3
    脚本之家的一个meta的帖子
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8947949.html
Copyright © 2020-2023  润新知