程序员面试金典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的子串
代码如下:
比如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; }
相关文章推荐
- 黑马程序员——java基础——反射的定义及用法
- 程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零
- 程序员面试金典1.6:将图像旋转90度。不占用额外内存空间
- 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面
- 面试题:乱序字符串
- 2014腾讯、百度、阿里面试经验
- 黑马程序员 File&Properties&URL
- 黑马程序员 --- NSString和NSMutableString的用法
- mybatis常见的面试题
- 关于线程的面试题
- 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)
- 腾讯面试题
- 《剑指Offer》面试题:找到第一个只出现一次的字符
- 程序员面试金典1.5:实现字符串的压缩功能
- 《程序员思维训练》读书小记
- 面试题25.二叉树中和为某一值的路径
- 知识点总结: Java 面试宝典 2013版(超长版) - Java Web 部分
- 面试题24.二叉搜索树的后序遍历序列
- 黑马程序员_集合框架(三)
- 每天5道面试题(六)java基础