Day13_剑指Offer

Day13_剑指Offer

加油,加油,再加油~~~

package com.sorrymaker.day3713;

import org.junit.Test;

/**输入一个英文句子,翻转句子中单词的顺序,
 * 但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。
 * 例如输入字符串"I am a student. ",则输出"student. a am I"。
 * @Author nextGame
 * @Date 2021/8/24 21:09
 * @Version 1.0
 */
public class ReverseWords {

    @Test
    public void test(){
        reverseWords("  hello       world!");
    }

    public String reverseWords(String s) {
        // 删除首尾空格
        s = s.trim();
        int j = s.length() - 1, i = j;
        StringBuilder res = new StringBuilder();
        while(i >= 0) {
            // 搜索首个空格,因为两个单词之间,有空格,
            while(i >= 0 && s.charAt(i) != ' ') {
                i--;
            }
            // 添加单词
            //搜索到空格后。就是i+1 --- j+1之间的 char ,组成的就是一个单词
            res.append(s.substring(i + 1, j + 1) + " ");
            // 跳过单词间空格
            while(i >= 0 && s.charAt(i) == ' ') {
                i--;
            }
            // j 指向下个单词的尾字符
            j = i;
        }
        // 转化为字符串并返回
        return res.toString().trim();
    }
}
posted @ 2021-08-24 22:02  独眼龙  阅读(23)  评论(0)    收藏  举报