zoukankan      html  css  js  c++  java
  • 字符串翻转

    题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“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);
        }
  • 相关阅读:
    TCP四次握手断开连接(十一)
    Go-函数
    Go-数据类型以及变量,常量
    GO语言介绍以及开发环境配置
    Socket与WebSocket以及http与https重新总结
    希尔排序
    第19课
    第18课
    外传篇3 动态内存申请的结果
    外传篇2 函数的异常规格说明
  • 原文地址:https://www.cnblogs.com/lzrabbit/p/3819078.html
Copyright © 2011-2022 走看看