151. 翻转字符串里的单词

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

自己的思路:使用两个指针,i 指针负责从后向前遍历整个字符串,j 指针找到单词的末尾字符,单词开头的特点是:空格+字符(字符串的开头添加一个空格);单词末尾的特点:字符+空格/字符;

java代码:

    public static String reverseWords(String s) {
        StringBuilder str = new StringBuilder();
        s = " "+s;//字符串的开头添加一个空格
        for (int i = s.length() - 1, j = s.length() - 1; i >= 1; i--){
            if (s.charAt(i - 1) != ' ' && s.charAt(i) == ' '){//如果 i 所指位置为空,前一位不为空,则说明前一位为单词的结尾,将 j 指向此处;
                j = i-1;
            }
            if (s.charAt(i - 1) == ' ' && s.charAt(i) != ' ') {//如果 i 所指位置不为空,前一位为空,则说明找到了该单词的开头,截取头和尾之间的字符串即为一个单词,并在单词后添加一个空格。
                String temp = s.substring(i, j+1);
                str.append(temp+" ");
            }
        }
        str.deleteCharAt(str.length()-1);//去除末尾多余的一个空格
        return str.toString();
    }

知识点:java.lang.StringBuffer.deleteCharAt() 在这个序列中的指定位置删除字符。

效果:

151. 翻转字符串里的单词

 

 

官方:

 

别人的解答:不要使用辅助空间,空间复杂度要求为O(1)。https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

思路:移除多余空格、将整个字符串反转、将每个单词反转

 

上一篇:FH151单片机丝印151纯IO芯片SOP8封装


下一篇:Doxygen wizard - Expert - Source Browser Index