• 字符串逆序方法比较


    选几种典型的加以说明

    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
  • 相关阅读:
    第九篇:网络编程
    第十篇:并发编程
    Python-GIL 进程池 线程池
    Python-生产者消费模型 线程
    Python-互斥锁 进程间通讯
    第八篇:异常处理
    第六篇:面向对象
    第四篇:模块与包
    【转】英语中的并列连词,只知道 and 和 but?11组并列连词,一篇搞定!
    【转】英语中的从属连词,28个,一篇搞定(句子结构2)
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179772.html
Copyright © 2020-2023  润新知