欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试题58 - I. 翻转单词顺序

程序员文章站 2022-04-30 18:26:29
...

题目:

面试题58 - I. 翻转单词顺序
151. 翻转字符串里的单词
面试题58 - I. 翻转单词顺序

题解:

  1. 问题1:
    面试题58 - I. 翻转单词顺序
  2. 问题2:
    面试题58 - I. 翻转单词顺序
  3. 问题3:
    面试题58 - I. 翻转单词顺序

1. 题解一:双指针

面试题58 - I. 翻转单词顺序
面试题58 - I. 翻转单词顺序

2. 题解二:分割 + 倒序

面试题58 - I. 翻转单词顺序
面试题58 - I. 翻转单词顺序
面试题58 - I. 翻转单词顺序
面试题58 - I. 翻转单词顺序

代码:

1. 代码一:双指针

public class 面试题58_1 {

    // 方法1:双指针
    public static String reverseWords(String s) {
        s = s.trim(); // 删除首尾空格
        int j = s.length() - 1;
        int i = j;
        StringBuilder res = new StringBuilder();
        while(i >= 0)
        {
            while(i >= 0 && s.charAt(i) != ' ') // 搜索首个空格
            {
                i--;
            }
            String temp = s.substring(i + 1, j + 1); // 截取单词
            res.append(temp + " "); // 添加单词
            while(i >= 0 && s.charAt(i) == ' ') // 跳过单词间空格
            {
                i--;
            }
            j = i; // j 指向下个单词的尾字符
        }
        return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回
    }

    public static void main(String[] args) {
        String s1 = "the sky is blue";
        String s2 = "  hello world!  ";
        String s3 = "a good   example";

        String res1 = reverseWords(s1);
        String res2 = reverseWords(s2);
        String res3 = reverseWords(s3);

        System.out.println(res1);
        System.out.println(res2);
        System.out.println(res3);
    }
}

2. 代码二:分割 + 倒序

public class 面试题58_1 {

    // 方法2:分割 + 倒序
    public static String reverseWords(String s) {
        s = s.trim(); // 删除首尾空格
        String str[] = s.split(" "); // 以空格为分割符完成字符串分割
        StringBuilder res = new StringBuilder();
        for(int i = str.length - 1; i >= 0; i--) // 倒序遍历单词列表
        {
            if(str[i].equals("")) // 遇到空单词则跳过
            {
                continue;
            }
            res.append(str[i] + " "); // 将单词拼接至 StringBuilder
        }
        return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回
    }

    public static void main(String[] args) {
        String s1 = "the sky is blue";
        String s2 = "  hello world!  ";
        String s3 = "a good   example";

        String res1 = reverseWords(s1);
        String res2 = reverseWords(s2);
        String res3 = reverseWords(s3);

        System.out.println(res1);
        System.out.println(res2);
        System.out.println(res3);
    }
}

参考:

  1. 面试题58 - I. 翻转单词顺序(双指针 / 库函数,清晰图解)
  2. 翻转字符串里的单词
  3. 151. 翻转字符串里的单词(双指针 / 库函数,清晰图解)