字符串包含问题的求解(最简单的方法——只有两行代码)

来源:互联网 发布:淘宝详情自动生成 编辑:程序博客网 时间:2024/05/21 09:44

我们在参加笔试或者写代码的时候总会与字符串打交道,今天主要想说的是如何解决字符串包含的问题。

问题是,给你一个字符串然后让你循环移位能否得到一个给定的字符串,比如给你ABCDE 能否将其进行移位得到CDEA,这样的问题。

遇到这样的 问题我们可能第一件事就是对其进行循环移位,这个方法是没有问题的,但是我们想想如果字符串很长很长,那么我们的效率是不是会很高呢?时间复杂度应该为字符串的长度。这样肯定效率不是很高的。下面我们来进行分析。

ABCDE进行移位得到的结果为:

            ABCDE ->BCDEA -> CDEAB -> DEABC -> EABCD -> ABCDE

我们这样来看,

            BCDEA = ABCDE ABCDE 去掉前面的A字母和后面的BCDE字母

            CDEAB = ABCDE ABCDE 去掉前面的AB字母和后面的CDE字母

            同理。。。。。。。。

我们发现不管怎么旋转ABCDE都是可以由ABCDEABCDE截取下来得到的。

所以我们的问题也就解决了,我们把原来的字符串进行相叠加,也就是将ABCDE叠加为ABCDEABCDE,这样我们在判断移位得到子串的时候就直接进行判断是否包含就可以知道能不能从原来的字符串移位得到了。

所以这样的一个方法就使我们的程序变得非常的简单了。

下面是一个简单的例子来说明下:

package testString;public class TestString {/** * @param args */public static boolean isContent(String str1,String str2){//str1为原来的字符串,str2为能否得到的字符串String tem  = str1+ str1;boolean result = tem.contains(str2);return result;}public static void main(String[] args) {// TODO Auto-generated method stubString str1 = "ABCDE";String str2 = "CDEA";System.out.println(isContent(str1, str2));}}


得到的结果为:

true

 

所以我们这样就不需要循环就OK了。既简单有提高了效率。