字符串包含问题的求解(最简单的方法——只有两行代码)
2012-10-17 10:59
435 查看
我们在参加笔试或者写代码的时候总会与字符串打交道,今天主要想说的是如何解决字符串包含的问题。
问题是,给你一个字符串然后让你循环移位能否得到一个给定的字符串,比如给你ABCDE 能否将其进行移位得到CDEA,这样的问题。
遇到这样的 问题我们可能第一件事就是对其进行循环移位,这个方法是没有问题的,但是我们想想如果字符串很长很长,那么我们的效率是不是会很高呢?时间复杂度应该为字符串的长度。这样肯定效率不是很高的。下面我们来进行分析。
ABCDE进行移位得到的结果为:
ABCDE ->BCDEA -> CDEAB -> DEABC -> EABCD -> ABCDE
我们这样来看,
BCDEA = ABCDE ABCDE 去掉前面的A字母和后面的BCDE字母
CDEAB = ABCDE ABCDE 去掉前面的AB字母和后面的CDE字母
同理。。。。。。。。
我们发现不管怎么旋转ABCDE都是可以由ABCDEABCDE截取下来得到的。
所以我们的问题也就解决了,我们把原来的字符串进行相叠加,也就是将ABCDE叠加为ABCDEABCDE,这样我们在判断移位得到子串的时候就直接进行判断是否包含就可以知道能不能从原来的字符串移位得到了。
所以这样的一个方法就使我们的程序变得非常的简单了。
下面是一个简单的例子来说明下:
得到的结果为:
true
所以我们这样就不需要循环就OK了。既简单有提高了效率。
问题是,给你一个字符串然后让你循环移位能否得到一个给定的字符串,比如给你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 stub String str1 = "ABCDE"; String str2 = "CDEA"; System.out.println(isContent(str1, str2)); } }
得到的结果为:
true
所以我们这样就不需要循环就OK了。既简单有提高了效率。
相关文章推荐
- 用非递归方法实现 求解字符串组合的问题 JAVA代码
- 动态规划(Dynamic programming,DP),通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。通常许多
- 数值计算方法 求解初值问题(伪代码 c/c++ python)
- 动态规划(Dynamic programming,DP),通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。通常许多子问题非-
- Rational Krylov Method(克雷洛夫法)求解特征值问题matlab代码示例(和Arnoldi方法比较)
- PHP简单判断字符串是否包含另一个字符串的方法
- 使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
- 字符串是否包含问题利用素数求解
- 奔五的人学ios:swift居然没有字符串包含,找个简单的解决方法
- Asp.Net判断一个字符串是否包含某个字符的最简单方法!(示例)
- OC代码简单的混淆-方法变量名字符串替换
- 计算两个字符串之间是否包含的简单方法
- python split同时用多种字符分割字符串并去除空串 简单两行代码实现
- js判断是否包含字符串的代码;转换前端显示科学记数法的方法
- 字符串的简单包含问题,主要看看转换问题的思路
- java设置一段代码执行的超时时间的简单方法 间接实现获取Connection超时问题
- java中按字节获得字符串长度的两种方法 Java问题通用解决代码
- 矩阵式比较两文本字符串相似度(包含汉字)方法两则(java代码)
- 字符串的简单包含问题,主要看看转换问题的思路
- 字符串包含问题的求解