算法每日一题 - 句子逆序

题目描述

原题

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。

解题思路

  • 从后往前依次遍历字符,通过判断字符是否为空来切分每个单词
  • 两次翻转:先整体翻转,然后再每个单词翻转
  • API法:用split分割字符串后逆序输出

代码实现

public class ReverseSentence {
    public String reverse(String sentence) {
        String str = "";
        StringBuilder result = new StringBuilder();
        // 从后往前扫描,遇到空格就处理一个单词
        for (int i = sentence.length() - 1; i >= 0; i--) {
            if (sentence.charAt(i) != ' ')
                str += sentence.charAt(i);
            else {
                for (int j = str.length() - 1; j >= 0; j--)
                    result.append(str.charAt(j));
                result.append(" ");
                str = "";
            }
        }
        // 再把最后一个单词追加到结果串上
        for (int j = str.length() - 1; j >= 0; j--)
            result.append(str.charAt(j));
        return result.toString();
    }

    /**
     * 用split分割字符串后逆序输出
     */
    public String reverseAPI(String sentence) {
        StringBuilder sb = new StringBuilder();
        String[] words = sentence.split("\\s+");
        for (int i = words.length - 1; i > 0; i--) {
            sb.append(words[i]).append(" ");
        }
        sb.append(words[0]);
        return sb.toString();
    }

    public static void main(String[] args) {
        ReverseSentence obj = new ReverseSentence();
        System.out.println(obj.reverse("I am a boy"));
    }
}

参考资料

算法面试题

你可能感兴趣的:(算法每日一题 - 句子逆序)