标签:
/*
 * 字符串移位包含的问题
 * 给定两个字符串,要求判定s2是否能够被s1叫做循环移位得到的字符串包含.
 *  例如给定 s1=AABCD,s2=CDAA,返回true; 
 *  给定 S1=ABCD, s2=ABCD,返回false
*/
public class QuestionAlia{
	//方法 一: 利用java的 substring()及startsWith()方法 
	public static boolean isXunHuan(String text,String query){
		 for(int i=0;i<text.length();i++){
			        //text直接包含query的情况,判断query是否为text的某个后缀的前缀
			  if(text.substring(i).startsWith(query))
				    return true;
			  else{                    //text通过循环移位,包含query的情况;
				  for(int j=query.length();j>0;j--){    
					                /*
					                 * 若text的某个后缀substring(i,length)是query的前缀(0,j),
					                 * 且 text的子串substring(0,i)拥有某个前缀是 query的后缀substring(j)
					               */
					  if(text.substring(i).equals(query.substring(0,j)) &&
							    text.substring(0,i).startsWith(query.substring(j)))
						  return true;
				  }
			  }
		 }
		  return false;
	}
	//方法 二:将text复制如: AABCD 变成 AABCDAABCD,再判断query是否为text的子串     ——以空间换时间 
	public static boolean isXunHuan2(String text,String query){
		  String newText=text+text;
		  for(int i=0;i<newText.length();i++){
			    //text直接包含query的情况,判断query是否为text的某个后缀的前缀
			  if(newText.substring(i).startsWith(query))
				    return true;
		  }
		  return false;
	  }
	//方法三:C中strstr方法  ,使用char数组,并对text进行循环移位,再利用strstr(char[] src,char[] search)方法直接判断子串 .
	public static boolean isXunHuan3(char[] text,char[] query){
		  for(int i=0;i<text.length;i++){
			    char tempchar=text[0];
			    int j;
			  for(j=0;j<text.length-1;j++)
				    text[j]=text[j+1];
  text[j]=tempchar;
  if(strstr(query,text)==0)
       return true;
    }
		return false;
	}
标签:
原文地址:http://www.cnblogs.com/dan-cnblogs/p/4739781.html