字符串移位之后是否包含另一字符串之java实现

原创 2015年11月20日 21:00:54

字符串移位之后是否包含另一字符串之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代码实现。如果有更不错的方法,欢迎评论!




版权声明:本文为博主原创文章,未经博主允许不得转载。

字符串移位包含的问题

//字符串移位包含的问题 /* 给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位得到的字符串包含, 例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=A...
  • u012260238
  • u012260238
  • 2015年07月27日 09:53
  • 564

字符串移位包含问题

题目描述:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含。 例如,给定s1=AABCD和s2=CDAA,返回true,给定s1=ABCD和s2=A...
  • love254443233
  • love254443233
  • 2013年06月06日 16:25
  • 888

java中判断一个字符串1中包含某个字符或字符串2

判断字符串2是否为字符转1的子集: 重要逻辑: int i = 0,j = 0; if(s1.charAt(i) == s2.charAt(j)){  i++;j++; } else {  i++; ...
  • fascinatingGirl
  • fascinatingGirl
  • 2016年10月21日 17:25
  • 612

字符串之字符串平移(java实现)

对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。      测试样例: "ABCDE",5,3 ...
  • p10010
  • p10010
  • 2015年11月14日 18:35
  • 789

字符串移位之后是否包含另一字符串之java实现

字符串移位之后是否包含另一字符串之java实现
  • u013871100
  • u013871100
  • 2015年11月20日 21:00
  • 619

编程之美-字符串移位包含的问题

第三章 3.1 字符串移位包含的问题问题详细描述:  给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位得到的字符串包含。输入输出示例:  给定s1=”AABCD”和s2=”CDAA”,返...
  • yannanying
  • yannanying
  • 2015年08月27日 21:13
  • 795

字符串移位包含的问题——解题笔记

字符串移位包含的问题——解题笔记          题目描述:给定两个字符串s1和s2,要求判定s2时候能够被s1做循环移位(rotate)得到的字符串包含。例如,给定s1=AABCD和s...
  • puqutogether
  • puqutogether
  • 2015年02月08日 10:55
  • 647

java两种方式实现“将字符串前m位移到字符串的第n位之后”

本文章是以《编程之法:面试和算法心得》书籍作为基础,将书籍中的算法使用java语言进行整理,以及个人所列举的计算方法,本文章根据本书中的第一章第一节字符串的旋转进行整理,并且提出了本人平时使用的计算方...
  • u011012826
  • u011012826
  • 2016年01月14日 14:44
  • 1374

字符串左右移动(java实现)

给定一个字符串,这个字符串为*号和26个字母的任意组合。现在需要把字符串的*号都移动到最左侧,而把字符串中的字母移动到最右侧并保持相对顺序不变,要求时间复杂度和空间复杂度最小。 分析:用point表...
  • gds2014
  • gds2014
  • 2015年11月19日 20:44
  • 1445

java 判断一个字符串是否包含另一个字符串

方法一: String str = "1234567"; if(str.indexOf("23") != -1) { System.out.println("包含...
  • u014221266
  • u014221266
  • 2015年04月11日 14:30
  • 14138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串移位之后是否包含另一字符串之java实现
举报原因:
原因补充:

(最多只允许输入30个字)