NC114:旋转字符串
旋转字符串
http://www.nowcoder.com/questionTerminal/80b6bb8797644c83bc50ac761b72981c
解法1:暴力求解
直接模拟即可:枚举旋转了几位,然后求出旋转后的字符串,比较是否与原字符串相同。
注意一下,如果两个字符串长度不同,无论如何旋转都不可能相同的,直接返回false。
public boolean solve (String A, String B) {
// write code here
int a=A.length();
int b=B.length();
if(A==null && B==null){
return true;
}
if(A==null || B==null || a!=b){
return false;
}
int n = A.length();
char[] ch=A.toCharArray();
for (int i = 1; i < n; ++i) {
String tmp="";
for (int j = i; j < n; ++j)
tmp += ch[j];
for (int j = 0; j < i; ++j)
tmp += ch[j];
if (tmp.equals(B))
return true;
}
return false;
}解法2:(A+A).contains(B);
1、假如 A="abcd" 则 A+A = "abcdabcd"
2、如果B 满足 题目的条件,则B 一定属于 A+A 里面的一个子串
public boolean solve (String A, String B) {
// write code here
int a=A.length();
int b=B.length();
if(A==null && B==null){
return true;
}
if(A==null || B==null || a!=b){
return false;
}
return (A+A).contains(B);
}解法3:B中是否同时包含 head和tail 两部分
1、A和B长度不等,则返回 false
2、A个B长度相等,不断的切割 A为head和tail 两部分
3、如果B中同时包含 head和tail 两部分,则返回true
4、如果一直没找到,则返回false
public boolean solve (String A, String B) {
// write code here
int a=A.length();
int b=B.length();
if(A==null && B==null){
return true;
}
if(A==null || B==null || a!=b){
return false;
}
int i=1;
while(i<a){
String headStr = A.substring(0,i);
String tailStr = A.substring(i);
if(B.contains(headStr)&&B.contains(tailStr)){
return true;
}
i++;
}
return false;
}名企高频面试算法题解 文章被收录于专栏
牛客题霸 - 程序员面试高频题 - 题解
