/*
* 字符串移位包含的問題
* 給定兩個字符串,要求斷定s2是否可以被s1叫作循環移位獲得的字符串包含.
* 例如給定 s1=AABCD,s2=CDAA,返回true;
* 給定 S1=ABCD, s2=ABCD,返回false
*/java
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;
}數組