Leetcode557 Reverse Words in a String III Java实现

这次准备试一试split一个String是用split好,还是手动找Index之后Substring好。因为强哥说Leetcode上运行时间不稳定,有时可能速度会差50%之多!

方法1,split:

public class ReverseWordsInAStringIII557 {
    public String reverseWords(String s) {
        String[] words = getWordsv1(s);
        StringBuilder result = new StringBuilder();
        boolean isFirst = true;
        for (String word:words) {
            StringBuilder sb = reverseWord(word);
            if (isFirst) {
                isFirst =false;
                result.append(sb);
            }
            else {
                result.append(" ");
                result.append(sb);
            }
        }
        return result.toString();
    }
    public static String[] getWordsv1(String s) {
        String[] words = s.split(" ");
        return words;
    }
    public StringBuilder reverseWord(String s) {
        char[] letters = s.toCharArray();
        int len = letters.length;
        for (int i =0;i<len/2;i++) {
            char temp = letters[i];
            letters[i] = letters[len-1-i];
            letters[len-1-i] = temp;
        } 
        StringBuilder sb = new StringBuilder();
        sb.append(letters);
        return sb;
    }
}

已经很不错了。下面尝试方法2,手动:

um……突然发现,String.indexOf方法不能返回所有的index,只能返回第一个和最后一个,um……纯手动遍历一波?试试吧。

尝试去写发现要用ArrayList,因为直接用int[]没法确定长度,那效率肯定就降低了。

所以以后遇到这种split不确定长度的问题还是用split吧,有定长且数量不多的split可以尝试更快的原始方法。

另外看到Discuss区里这篇也不错https://leetcode.com/problems/reverse-words-in-a-string-iii/discuss/101963/Easiest-Java-Solution-(9ms)-Similar-to-Reverse-Words-in-a-String-II

猜你喜欢

转载自www.cnblogs.com/chason95/p/9270532.html