Leetcode - Reverse Words in a String

My code:


public class Solution {
    public String reverseWords(String s) {
        if (s == null)
            return null;
        else if (s.length() == 0)
            return s;
        int i = s.length() - 1;
        int temp = i;
        String reverse = "";
        while (i >= 0) {
            if ((i + 1 < s.length()) && s.charAt(i) == ' ' && s.charAt(i + 1) != ' ')
                reverse += s.substring(i + 1, temp + 1) + " ";
            else if ((s.charAt(i) != ' ' && i + 1 < s.length()) && s.charAt(i + 1) == ' ')
                temp = i;
            i--;
        }
        if (s.charAt(0) != ' ')
            reverse += s.substring(0, temp + 1);
        
        if (s.charAt(temp) != ' ' && reverse.charAt(reverse.length() - 1) == ' ')
            return reverse.substring(0, reverse.length() - 1);
        return reverse;
    }
    
    public static void main(String[] args) {
        Solution test = new Solution();
        System.out.println(test.reverseWords(" "));
    }
}

My test result:

Paste_Image.png

這道題目好奇怪。我就遍歷了一次數(shù)組。。。跑的時間這么慢。
寫的我心情很糟糕了。題目本身沒什么難度。

**
總結(jié): String
**

Anyway, Good luck, Richardo!

My code:

public class Solution {
    public String reverseWords(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }
        
        char[] c = s.toCharArray();
        reverse(c, 0, c.length - 1);
        
        int begin = 0;
        int end = 0;
        while (end < c.length) {
            if (c[end] == ' ') {
                if (begin == end) {
                    begin++;
                    end++;
                }
                else {
                    reverse(c, begin, end - 1);
                    begin = end + 1;
                    end = begin;
                }
            }
            else {
                end++;
            }
        }
        
        if (begin < c.length) {
            reverse(c, begin, c.length - 1);
        }
        
        StringBuilder ret = new StringBuilder();
        int i = 0;
        while (i < c.length) {
            if (c[i] != ' ') {
                ret.append(c[i]);
                i++;
            }
            else {
                if (ret.length() == 0) {
                    i++;
                    continue;
                }
                ret.append(c[i]);
                while (i < c.length && c[i] == ' ') {
                    i++;
                }
            }
        }
        
        if (ret.length() > 0 && ret.charAt(ret.length() - 1) == ' ')
            ret.deleteCharAt(ret.length() - 1);
        return ret.toString();
    }
    
    private void reverse(char[] c, int i, int j) {
        int begin = i;
        int end = j;
        while (begin < end) {
            char temp = c[begin];
            c[begin] = c[end];
            c[end] = temp;
            begin++;
            end--;
        }
    }
}

思路很明顯,就是reverse
但是 corner case 很多。
我為了完全不用Java自帶的高級方法,所有東西都是通過數(shù)組實(shí)現(xiàn)。
其實(shí) leading and trailing spaces 可以用 string.trim() 消除。
但是又得新生成一個string,效率低。

所以,最后得判斷下,末尾是否有 空格, 如果有,那么刪除之。

Anyway, Good luck, Richardo! -- 09/12/2016

My code:

public class Solution {
    public String reverseWords(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }
        
        StringBuilder sb = new StringBuilder();
        for (int start = s.length() - 1; start >= 0; start--) {
            char curr = s.charAt(start);
            if (curr == ' ') {
                continue;
            }
            int end = start;
            while (start >= 0 && s.charAt(start) != ' ') {
                start--;
            }
            sb.append(s.substring(start + 1, end + 1) + " ");
        }
        return sb.toString().trim();
    }
}

reference:
https://discuss.leetcode.com/topic/30410/my-10-line-java-code-that-beats-73-of-the-submissions

還是選擇用一些更加簡單地方法來做,避免面試的時候?qū)懗鯾ug

Anyway,Good luck, Richardo! -- 09/25/2016

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容