翻转字符串

通过求逆来翻转字符串

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

题目

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

原字符串定位移动后字符串
abcdefghijklmnopqrstuvwxyz5fghijklmnopqrstuvwxyzabcde
abcdefghijklmnopqrstuvwxyz10klmnopqrstuvwxyzabcdefghij

方法

翻手法,亦即向量求逆。
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)));
    }
}

运行

  1. 原字符串:"abcdefghijklmnopqrstuvwxyz"
    位置:5
    转换后
    1345359-20180328223101327-1488919698.png

  2. 原字符串:"abcdefghijklmnopqrstuvwxyz"
    位置:10
    转换后
    1345359-20180328223131514-171447286.png

连续执行一百万次

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");

输出
1345359-20180328224757599-2109368698.png

字符串有十万位

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);
    }

输出
1345359-20180328225637443-607364892.png

分析

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

waiting for version 2.0

转载于:https://www.cnblogs.com/Mr-quin/p/8666801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值