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

    通过求逆来翻转字符串

    题目及思路来源自《编程珠玑》 2.3

    题目

    将一个字符串某一位之前的所有元素移到队尾。

    原字符串 定位 移动后字符串
    abcdefghijklmnopqrstuvwxyz 5 fghijklmnopqrstuvwxyzabcde
    abcdefghijklmnopqrstuvwxyz 10 klmnopqrstuvwxyzabcdefghij

    方法

    翻手法,亦即向量求逆。
    s = a + b
    a = abcd;
    a' = bcda;
    翻转后
    s1 = s' = (a' + b')'

    代码

    public class VectorRotate {
    	private String str ;
    	private String fStr;
    	private String lStr;
    	
    	public VectorRotate(int i){
    		str = "abcdefghijklmnopqrstuvwxyz";
    		fStr = str.substring(0, i);
    		lStr = str.substring(i);
    	}
    	
    	public String sWap(String s){
    		String as = "";
    		for(int i = s.length()-1; i >=0 ;i--){
    			as += s.charAt(i)+"";
    		}
    		return as;
    	}
    	
    	public static void main(String[] args) {
    		int i = 10;
    		System.out.println(vr.sWap(vr.sWap(vr.fStr) + vr.sWap(vr.lStr)));
    	}
    }
    

    运行

    原字符串:"abcdefghijklmnopqrstuvwxyz"
    位置:5
    转换后

    原字符串:"abcdefghijklmnopqrstuvwxyz"
    位置:10
    转换后

    连续执行一百万次

    long time = System.currentTimeMillis();
    for(int j=0;j<1000000;j++)
    vr.str = vr.sWap(vr.sWap(vr.fStr) + vr.sWap(vr.lStr));
    time = System.currentTimeMillis() - time;
    		
    System.out.println(vr.str+" time: "+time+"ms");
    

    输出

    字符串有十万位

    public VectorRotate(int i,int k){
    	//10000*10 = 100000
    	str = "";
    	for(int j = 0; j<10000 ; j++)
    		str += "abcdefghij";
    	fStr = str.substring(0, i);
    	lStr = str.substring(i);
    	}
    

    输出

    分析

    在求字符串的逆时浪费了过多的时间,导致结果并不是很理想,在有10万位时速度明显降低。求逆算法待优化。

    waiting for version 2.0

  • 相关阅读:
    注意力机制在CV领域的应用之SEnet
    知识蒸馏技术原理
    batchsize如何影响模型的性能
    docker网络 macvlan
    docker pull使用 代理
    auditd重启失败
    3.Golang的包导入
    2.golang应用目录结构和GOPATH概念
    使用git版本管理时的免密问题
    1.go语言目录结构
  • 原文地址:https://www.cnblogs.com/Mr-quin/p/8666801.html
Copyright © 2011-2022 走看看