151. Reverse Words in a String

没啥难的,难点在于各种带空格的edge cases.

然后 按空格分是

str.split("s+");

public String reverseWords(String s) 
    {
        if(s == null) return null;
        s = s.trim();
        if(s.length() == 0) return "";

        int length = s.split("\s+").length;

        StringBuilder[] sbArray = new StringBuilder[length];

        StringBuilder res = new StringBuilder();
        int n = 0;
        for(String tempStr : s.split("\s+"))
        {
            StringBuilder tempSB = new StringBuilder(tempStr);
            sbArray[n++] = tempSB;
            
        }   

        for(int m = length-1; m >= 0; m--)
        {
            res.append(sbArray[m]).append(" ");
        }

        return res.toString().trim();


    }



二刷。

感觉这个题是E难度的。。可能本意是考C,C++这种指针运算,in-place的话还有那么点意思。

对于Java来说比较直接,用split去掉空格顺便变成String[],然后倒着遍历就行了。。

需要注意的就是split()里面的regular expression,我到现在都记不住,每次都上网查。。

网络课和编译器课都学过,学过就忘,忘了就查,羞耻地活在这个世界上……

image

public class Solution 
{
    public String reverseWords(String s) 
    {
        if(s.length() == 0) return "";
        s = s.trim();

        String[] strArray = s.split("\s+");
        
        String res = new String();
        for(int i = strArray.length-1;i>=0;i--)
        {
            res += strArray[i] + " ";
        }
        
        return res.trim();
    }
}



三刷。

用split来做。。
分完之后倒着添加,注意仔细。。

public class Solution {
    public String reverseWords(String s) {
        if (s.length() == 0) return s;
        s = s.trim();
        if (s.length() == 0) return "";
        String[] str = s.split("\s+");
        StringBuilder sb = new StringBuilder();
        for (int i = str.length - 1; i >= 0; i--) {
            sb.append(str[i]).append(" ");;
        }
        return sb.toString().trim();
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/5887417.html