字符串移位之后是否包含另一字符串之java实现
2015-11-20 21:00
477 查看
字符串移位之后是否包含另一字符串之java实现
对源字符串srcStr进行若干次移位,判断是否包含另一字符串desStr。举个例子,srcStr="AABBCD" desStr="CDAA" ,则符合上面的叙述,只需要将srcStr中的CD先后左移即可。下面采用两种方式实现这一算法。
第一种方法:每一次将srcStr进行若干次的左移或者右移(会发现是同一个道理)srcStr.length()次,然后在每一次中检查是否包含目的字符串desStr。
相应的java程序如下:
<span style="font-size:14px;">/** * * @author zhonglinsen * 字符串旋转 后 是否包含指定的字符串 AABBCD旋转后则会包含 CDAA */ public class StringRotateIncludeOne { /** * @param src 待旋转的源字符串 * @param des 待检测的是否被包含的字符串 * @return true:即包含 */ public boolean StringRotateInclude(char[] src,char[] des){ boolean flag=false; for (int i = 0; i < src.length; i++) { //字符串的循环移位 char tempChar=src[0]; for (int j = 0; j < src.length-1; j++) { src[j]=src[j+1]; } src[src.length-1]=tempChar; //字符数组 转 字符串 String srcStr=String.valueOf(src); String desStr=String.valueOf(des); //判断是否包含某一个字符串 if (srcStr.contains(desStr)) { flag=true; break; } } return flag; } public static void main(String[] args) { //字符串 转 字符数组 char[] srcStr="AABBCD".toCharArray(); char[] desStr="CDAAS".toCharArray(); StringRotateIncludeOne sri=new StringRotateIncludeOne(); boolean res=sri.StringRotateInclude(srcStr, desStr); System.out.println(res); } }</span>其中需要注意的是,字符数组char[] des转字符串String的方法并不是将字符数组char[] des 直接des.toString() ,那样只会得到地址。正确的方式应该是:String.valueOf(des)。
第二种方法:将源字符串srcStr进行左移或者右移srcStr.length(),其中保留待移动的字符在原来的位置上,然后直接判断是否包含目的字符串desStr。即上面的例子中srcStr="AABBCD",左移或者右移实际上用不着,直接两个srcStr即为左移或者右移srcStr.length()后的字符串即 srcStrSec="AABBCDAABBCD",这样子实际上就可以判断是否包含目的字符串了,因为srcStrSec包含了第一种方法中每一次不保留原先字符的左移或者右移后得到的字符串,只要想一想,在草稿纸上描绘秒回
这显然是一种空间换取时间的方法。
java代码如下:
/** * * @author zhonglinsen * 字符串旋转 后 是否包含指定的字符串 AABBCD旋转后则会包含 CDAA */ public class StringRotateIncludeOne { /** * 第二种方法:空间换时间 * @param src * @param des * @return */ public boolean StringRotateIncludeTwo(char[] src,char[] des){ boolean flag=false; String srcReal=String.valueOf(src); srcReal += srcReal; String desReal=String.valueOf(des); if (srcReal.contains(desReal)) { flag=true; } return flag; } public static void main(String[] args) { //字符串 转 字符数组 char[] srcStr="AABBCD".toCharArray(); char[] desStr="CDAAS".toCharArray(); boolean res=sri.StringRotateIncludeTwo(srcStr,desStr); System.out.println(res); } }
以上的题目以及方法来源于“编程之美”,自己觉得不错,只是原书使用C代码实现。如果有更不错的方法,欢迎评论!
相关文章推荐
- 学习java手动编译
- Struts登录
- Java高级部分--异常重点总结
- Java会出现"unreachable code"错误的几个例子
- Eclipse错误集(一)
- 使用javaassist在内存中动态生成类
- MyEclipse中配置Strut.xml自动提示功能
- Java多线程同步与synchronized
- spring AOP
- JavaWeb的两种开发模式
- eclipse设置代理下载androidSDK
- 从Java~dotNet 进化模式
- JAVA --泛型学习补充(一)
- JavaSE__Integer 的默认初始值
- JDBC--使用beanutils工具类操作JavaBean
- Java创建二叉搜索树,实现搜索,插入,删除操作
- Java创建二叉搜索树,实现搜索,插入,删除操作
- Java元注解
- 传智播客javase总结 2
- Struts2的简单配置