题目:
1.8 假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring。 比如,waterbottle是erbottlewat旋转后的字符串。
解题思路:
如何判断s2为s1旋转得到?
若s2为s1旋转得到,则必定有一个旋转点使得s2=s12+s11;
则将s1复制得到s1s1,s1s1=s11+s12+s11+s12,则s1s1串中必然包含s2这个子串,使用子串判断函数则可得到最终结果。
代码:
/*
* 1.8 假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。
* 给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring。
* 比如,waterbottle是erbottlewat旋转后的字符串。
*/
package mainshijindian;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.BoldAction;
public class IsRotationString {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String s1=input.next();
String s2 = input.next();
IsRotationString example = new IsRotationString();
boolean result = example.isRotation(s1, s2);
System.out.println("The result is "+result);
}
/*
* 主要思想:如何判断s2为s1旋转得到?
* 若s2为s1旋转得到,则必定有一个旋转点使得s2=s12+s11;
* 则将s1复制得到s1s1,s1s1=s11+s12+s11+s12,则s1s1串中必然包含s2这个子串,使用子串判断函数则可得到最终结果。
*/
public boolean isRotation(String s1,String s2)
{
int len=s1.length();
if(s2.length()==len&&len>0) //判断两个字符串长度是否相等,并且长度不为0
{
String s1s1 = s1+s1;
return s1s1.contains(s2);
}
return false;
}
}