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

  • 相关阅读:
    (转载)林轩田机器学习基石课程学习笔记1 — The Learning Problem
    二、HDFS(架构、读写、NN)
    剑指:和为S的两个数字
    剑指:和为S的连续正数序列
    Hive:数据倾斜
    linux如何查看端口被哪个进程占用
    du查看某个文件或目录占用磁盘空间的大小
    剑指:滑动窗口的最大值
    leetcode之求众数
    剑指:重建二叉树
  • 原文地址:https://www.cnblogs.com/Mr-quin/p/8666801.html
Copyright © 2011-2022 走看看