首页 > 代码库 > 字符串翻转

字符串翻转

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“It‘s a good day.”,则输出“day. good a It‘s”

思路1:先翻转整个字符串,然后从首字母开始,每扫描一个单词(遇到空格),翻转一个单词

    /**     * 字符串翻转     * 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“It‘s a good day.”,则输出“day. good a It‘s”     * 思路:先翻转整个字符串,然后从首字母开始,每扫描一个单词(遇到空格),翻转一个单词     *     * @param input     * @return     */    public String reverse(String input) {        char[] output = input.toCharArray();        reverse(output, 0, output.length);        int i = 0;        for (int j = 0; j < output.length; j++) {            if (output[j] == ‘ ‘) {                reverse(output, i, j);                i = j + 1;            }        }        reverse(output, i, output.length);        //reverse(output, , output.length);        return String.valueOf(output);    }    /**     * 翻转整个字符数组     *     * @param input     * @param begin     * @param end     */    private void reverse(char[] input, int begin, int end) {        if (begin == end) return;        while (begin < --end) {            char c = input[begin];            input[begin] = input[end];            input[end] = c;            begin++;        }    }

思路2:创建一个字符数组,逆序遍历整个字符串,依次将扫描到的单词(遇到空格)存放到字符数组中

    /**     * 字符串翻转     * 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“It‘s a good day.”,则输出“day. good a It‘s”     * 思路:创建一个字符数组,逆序遍历整个字符串,依次存将扫描到的单词(遇到空格)存放到字符数组中     * @param input     * @return     */    public String Reverse(String input) {        int current = 0;        char[] output = new char[input.length()];        char[] chars = input.toCharArray();        int begin;        int end = chars.length;        for (int i = chars.length - 1; i >= 0; i--) {            if (chars[i] == ‘ ‘) {                begin = i + 1;                while (begin < end) {                    output[current++] = chars[begin++];                }                output[current++] = ‘ ‘;                end = i;            }        }        begin = 0;        while (begin < end) {            output[current++] = chars[begin++];        }        return String.valueOf(output);    }