1.1 两个字符串,String s1,s2;
判断两个字符串是否可以循环匹配?
例如:s1="abcaa"和s2="aaabc"匹配。
代码如下:
方法一:
/比较两个字符串是否循环匹配
public class CycleMatchDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="abcaa";
String s2="aabca";
System.out.print(s1+"\t"+s2+"\n");
stringcyclematch stringcyclematch=new stringcyclematch();
if(stringcyclematch.cyclematch(s1, s2))
System.out.println("true");
else
{
System.out.println("false");
}
}
}
public class stringcyclematch {
public boolean cyclematch(String s1,String s2)
{
int length1=s1.length();
int length2=s2.length();
int k=length1;
int number=length1;
int startindex=s1.indexOf(s2.charAt(0));
int endindex=s1.lastIndexOf(s2.charAt(0));
if(length1!=length2)
{
return false;
}
else {
while(startindex<endindex)
{
number=length1;
for(int i=startindex;number>0;i++)
{
int valueindex=i%(length1-1);
if(s1.charAt(valueindex)==s2.charAt(i-startindex))
number--;
else {
break;
}
}
if(number==0)
return true;
else {
startindex=s1.substring(startindex+1).indexOf(s2.charAt(0))+startindex+1;
}
}
for(int i=startindex;number>0;i++)
{
int valueindex=i%(length1-1);
if(s1.charAt(valueindex)==s2.charAt(i-startindex))
number--;
else {
return false;
}
}
return true;
}
}
}
复杂度:o(n)
方法2:
把其中一个字符串连接起来:
如:string s1="aaabc";
string s2="aabca";
可以把s1链接为:"aaabcaaab";
然后变为s2在s1中字符串匹配。
标准的方法:待续。