算法每日一题 - 句子逆序

2018-02-02  本文已影响37人  野狗子嗷嗷嗷

题目描述

原题

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

解题思路

代码实现

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"));
    }
}

参考资料

算法面试题

上一篇下一篇

猜你喜欢

热点阅读