zoukankan      html  css  js  c++  java
  • 字符串反转记录总结

    前文:  

               参考博客:https://blog.csdn.net/cghu1201/article/details/78490934

    代码:

             

    package algorithm;
    
    /**
     * @ProjectName: practice$
     * @Package: algorithm$
     * @ClassName: Reverse$
     * @Description:
     * @Author: WG
     * @CreateDate: 2018/6/22$ 19:19$
     * @UpdateUser: 更新者
     * @UpdateDate: 2018/6/22$ 19:19$
     * @UpdateRemark: 更新内容
     * @Version: 1.0
     */
    public class Reverse {
    
    
        public static void main(String[] args) {
            String demo = "abcdefg";
            String result = reverseRecurive(demo);
            System.out.println(result);
        }
    
        /**
         * 首先用String的charAt方法分解字符串,然后用一个临时的字符串接收每次
         * 循环的字符串,最后通过一个小技巧,把每次分解的字符串(s.charAt(i)+reverse;)
         * 的s.charAt(i)放在上一次字符串存储的前面,就可的到后面的字符串在前面,而前面
         * 的字符串在后面
         *
         * @param s
         * @return
         */
        public static String CharAtReverse(String s) {
            int length = s.length();
            String reverse = "";
            for (int i = 0; i < length; i++) {
                reverse = s.charAt(i) + reverse;
            }
            return reverse;
        }
    
    
        /**
         * 这个方法直接把字符串转换成char型数组,然后循环最后的字符,从后往前用
         * 临时字符串存储,最后的字符串反转的效果
         *
         * @param s
         * @return
         */
        public static String reverseCharArray(String s) {
            char[] array = s.toCharArray();
            String reverse = "";
            for (int i = array.length - 1; i > 0; i--) {
                reverse += array[i];
            }
            return reverse;
        }
    
        /**
         * 此方法最为快捷,直接用底层生成好的StringBuilder.reverse方法生成
         *
         * @param s
         * @return
         */
        public static String reverseStringBuilder(String s) {
            StringBuilder sb = new StringBuilder(s);
            String afterreverse = sb.reverse().toString();
            return afterreverse;
        }
    
        /**
         * 最后递归方法也最难为理解,但也逼格最高。
         * 算法过程:1.将字符串拆分成两串,类似于半分查找,比如abcdefg,拆分成abc-defg
         *          2.将右边的字符串放在临时字符串的左边位置,这是伏笔
         *          3.将defg(reverseRecurive(right)) 继续递归,可以得到 fg-de
         *             3.1   fg 递归
         *                   gf 递归  g 单个  出口   f 单个  出口
         *                   然后演变成gf
         *             3.2   de 递归
         *                   ....
         *          4.将 abc递归(reverseRecurive(left))
         *              ....
         *
         *          最后得出右边递归后的顺序+左边递归后的顺序
         *
         * @param s
         * @return
         */
        public static String reverseRecurive(String s) {
            int length = s.length();
            int test = length / 2;
            if (length <= 1)
                return s;
            String left = s.substring(0, length / 2);
            String right = s.substring(length / 2, length);
    
            String afterReverse = reverseRecurive(right) + reverseRecurive(left);
    
            return afterReverse;
    
    
        }
    
    
    }
  • 相关阅读:
    Spring中配置和读取多个Properties文件
    python 数据清洗
    python excel 文件合并
    Pandas -- Merge,join and concatenate
    python 数据合并
    python pandas
    python Numpy
    EXCEL 导入 R 的几种方法 R—readr和readxl包
    R语言笔记完整版
    第十三章 多项式回归分析
  • 原文地址:https://www.cnblogs.com/w-gao/p/9215761.html
Copyright © 2011-2022 走看看