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
  • 相关阅读:
    EXCEL启动慢
    存货跌价准备-资产减值损失
    绩效软件交流-ZQDJ
    库存股
    CF788A Functions again dp
    CF788C The Great Mixing BFS+思维
    CF788B Weird journey 欧拉路径+计数
    CF786C Till I Collapse 整体二分+根号分治
    CF922D Robot Vacuum Cleaner 贪心+排序
    CF920C Swap Adjacent Elements 贪心
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179772.html
Copyright © 2011-2022 走看看