zoukankan      html  css  js  c++  java
  • 字符串逆序方法比较

    选几种典型的加以说明

    import java.io.BufferedInputStream;
    import java.util.Scanner;
    
    public class test {
    
        // 不返回串
        public static void reversePrint(String s, int i) {
            if (i != s.length()) {
                reversePrint(s, i + 1);
                System.out.print(s.charAt(i));
            }
        }
         // 返回串
        public static String reverseString(String s, int i) {
            if (i == s.length()) {
                return "";
            } else {
                String s1 = reverseString(s, i + 1);
                return s1 + s.charAt(i);
            }
        }
         // 返回串
        public static String reverseString1(String s) {
            int N = s.length();
            if (N <= 1) {
                return s;
            }
            String s1 = s.substring(0, N / 2);
            String s2 = s.substring(N / 2, N);
            return reverseString1(s2) + reverseString1(s1);
        }
         // 返回串,系统自带方法就是这样实现的,测试结果也是这种方法最快
        public static String reverseString2(String s) {
            int N = s.length() - 1;
            char[] c = s.toCharArray();
            for (int j = (N - 1) >> 1; j >= 0; --j) {
                int k = N - j;
                char ck = c[j];
                c[j] = c[k];
                c[k] = ck;
            }
            return new String(c);
        }
        public static void main(String[] args) {
            Scanner cin = new Scanner(new BufferedInputStream(System.in));
            String s = cin.next();
            cin.close();
            long l1 = System.nanoTime();
            reversePrint(s, 0); // 直接打印
            long e1 = System.nanoTime();
            System.out.println();
            System.out.println((e1-l1)+"ns");
            System.out.println();   
            
            long l2 = System.nanoTime();
            System.out.println(reverseString(s, 0)); // 直接递归到底层返回逆序回串
            long e2 = System.nanoTime();
            System.out.println((e2-l2)+"ns");
            System.out.println();
            
            long l3 = System.nanoTime();
            System.out.println(reverseString1(s)); // 二分递归到底层返回逆序串
            long e3 = System.nanoTime();
            System.out.println((e3-l3)+"ns");
            System.out.println();
            
            long l4 = System.nanoTime();
            System.out.println(reverseString2(s)); // 和java的StringBuilder一样的实现
            long e4 = System.nanoTime();
            System.out.println((e4-l4)+"ns");
            System.out.println();
        }
    }

           



    综上所述,最后一种方法最好,StringBuilder自带的reverse也是这样实现的


    ========================================Talk is cheap, show me the code=======================================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    Server Develop (三) 多进程实现C/S
    Server Develop (二) 多线程实现C/S
    Server Develop (一) 简单的TCP/IP C/S
    Server Develop (四) select实现非阻塞sever
    js添加、修改、删除xml节点例子
    网站弹出“位于Google Code SubversionRepository 的服务器……”的解决办法
    iframe嵌入网页
    asp空间判断jmail组件是否安装或支持的代码
    IE8的margintop兼容问题
    不错的CMS,值得借鉴!
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179772.html
Copyright © 2011-2022 走看看