Leetcode 151) Reverse Words in a String

image

https://leetcode.com/problems/reverse-words-in-a-string/

  • Lesson from this problem
    • Use library, API. totally okay
    • Make sure to consider both ends.
    • Write comments to clarify what function that code does
class Solution {
    public String reverseWords(String s){
        int ptr =s.length()-1;
        String result ="";
        boolean first= true;

        boolean space_trim = true;
        while(space_trim){
            if(s.charAt(ptr)==' '){
                ptr--;
            }else{
                space_trim=false;
            }
        }
        while(ptr>-1){
            //문자일 때나 공백이 처음이 아닐 때 계속 빼주기.
            if(ptr==0 && s.charAt(ptr)!=' '){
                for(int i=0;i<s.length();i++){
                    if(s.charAt(i)!=' '){
                        if(i==0 && result.length()!=0){
                            result+=' ';
                        }
                        result+=s.charAt(i);
                    }else{
                        i=s.length();
                    }
                }
                break;
            }
            if((s.charAt(ptr)!=' ' || !first)){
                ptr--;
                first=true;
            }else{
                //문자만 나오다가 공백이 처음 나온 경우
                for (int i=ptr+1; i<s.length(); i++){
                    // ' hello  ' 이 단어에서 hello만 빼내는 작업.
                    if(s.charAt(i)!=' '){
                        //단어의 처음이고, result 가 막 시작하지 않는 경우
                        if(i==ptr+1 && result.length()!=0){
                            result+=' ';
                        }
                        result+=s.charAt(i);
                    }else{
                        i=s.length();
                    }
                }
                first= false;
            }
        }
        return result;
    }
};

깔끔 솔루션

  • Stringbuilder 사용…
    • ” “ 를 기준으로 split해 어레이에 저장
    • word를 다 reverse함.
    • stringbuilder로 합친다..
class Solution {
    public String reverseWords(String s) {
        String[] words = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = words.length - 1; i >= 0; i--) {
            if (words[i].length() == 0) continue;
            sb.append(words[i]).append(' ');
        }
        return sb.substring(0, sb.length() - 1).toString();
    }
}

© 2018. All rights reserved.

Powered by Hydejack v8.5.2