其他分享
首页 > 其他分享> > 151. 翻转字符串里的单词

151. 翻转字符串里的单词

作者:互联网

双指针

class Solution {
    public String reverseWords(String s) {

        StringBuilder str = new StringBuilder();

        int left = 0;
        int right = s.length() - 1;

        /**
         * 去掉字符串前后的空格
         */
        while (left <= s.length() - 1 && s.charAt(left) == ' '){
            left++;
        }

        while (right >= 0 && s.charAt(right) == ' '){
            right--;
        }

        /**
         * 去掉字符串中间多余的空格
         */
        for (int i = left; i <= right; i++) {

            char c = s.charAt(i);

            /**
             * 不是空格直接添加
             * 如果是空格但是str最后一个元素不是空格,则可以添加
             */
            if (c != ' '){
                str.append(c);
            }
            else if (c == ' ' && str.charAt(str.length() - 1) != ' '){
                str.append(c);
            }
        }

        /**
         * 反转字符串
         */
        reverse(str, 0, str.length() - 1);

        /**
         * 反转单词
         */
        left = 0;

        for (int i = 0; i < str.length(); i++) {

            if (str.charAt(i) == ' '){

                reverse(str, left, i - 1);
                left = i + 1;
            }

            /**
             * 最后一个单词后面没有空格无法判断,因此单独判断
             */
            else if (i == str.length() - 1){
                reverse(str, left, i);
            }
        }

        return str.toString();
    }

    /**
     * 定义反转字符串方法
     */
    public void reverse(StringBuilder str, int left, int right){

        while (left < right){

            char temp;
            temp = str.charAt(left);
         
            /**
             * setCharAt()方法修改StringBuilder对象值
             */
            str.setCharAt(left, str.charAt(right));
            str.setCharAt(right, temp);
            left++;
            right--;
        }
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

库函数

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public String reverseWords(String s) {

        /**
         * trim()方法去除字符串前后空格
         */
        String str = s.trim();

        /**
         * split()方法根据分隔符分割字符串为字符串数组,存在多个空格用" +"
         */
        String[] strs = str.split(" +");

        /**
         * 字符串数组转为列表,再用Collections.reverse()方法反转列表
         */
        Collections.reverse(Arrays.asList(strs));

        /**
         * String.join()方法根据指定分隔符连接,形成新的字符串
         */
        return String.join(" ", strs);
    }
}

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

标签:151,空格,right,String,int,单词,Collections,字符串,翻转
来源: https://www.cnblogs.com/taoyuann/p/15913452.html