问题描述:给定两个字符串s1和s2,要求判定s2能否能被s1做循环移位得到的字符串包含。例如,s1=AABCD,s2=CDAA,返回true,给定s1=ABCD,s2=ACBD,返回false。
思路1:找出所有循环移位,逐个进行字符串匹配。n*字符串匹配的复杂度。kmp可以做到线性,因此总的复杂度为n^2.
思路2:s1复制一下,变成s1s1,如s1=ABCD,变成ABCDABCD,用它进行匹配。
package com.mico.alex;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.BoldAction;
public class StringShift {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
String s2 = scanner.nextLine();
System.out.println(shift(s1, s2));
}
public static boolean shift(String s1, String s2) {
int len1 = s1.length();
char[] cs1 = s1.toCharArray();
for(int i=0;i<len1;i++){
char temp = cs1[0];
for(int j=0;j<len1-1;j++){
cs1[j] = cs1[j+1];
}
cs1[len1 - 1] = temp;
s1 = new String(cs1);
if(s1.contains(s2)){
return true;
}
}
return false;
}
public static boolean shift1(String s1, String s2) {
String src = s1.concat(s1);
if(src.contains(s2)){
return true;
}
else{
return false;
}
}
}