您的位置:首页 > 职场人生

程序员面试金典1.8:判断翻转子串

2015-08-29 14:55 393 查看
1.8:假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring

比如waterbottle是erbottlewat旋转后的字符串

解法:

假定s2由s1旋转而成,那么,我们就可以找出旋转点在哪,例如,若以wat对waterbottle旋转,就会得到erbottlewat.在旋转字符串时,我们会把s1切分成两部分:x和y,并将它们重新组合成s2

s1=xy=waterbottle

x=wat

y = erbottle

s2=yx=erbottlewat

因此,我们需要确认有没有办法将s1切分成x和y,以满足xy=s1和yx=s2。不论x和y之间的分割点在何处,我们会发现yx肯定是xyxy的子串,也即s2总是s1s1的子串

代码如下:

public boolean isRotation(String s1,String s2){
int len = s1.length();
if(len == s2.length() && len >0){
String s1s1= s1+s1;
return isSubstring(s1s1,s2);
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: