调整字符串
- 规则:给定两个字符串,A和B
A的旋转操作就是将A最左边的字符移动到最右边 - 举例:若A=’abcde’,在移动一次之后结果就是‘bcdea’
- 如果在若干次调整操作之后,A能变成B,那么返回True
如果不能匹配成功,则返回false
public class FTest {
public static void main(String[] args) {
/*
* 调整字符串
* 规则:给定两个字符串,A和B
* A的旋转操作就是将A最左边的字符移动到最右边
* 举例:若A=’abcde',在移动一次之后结果就是‘bcdea'
* 如果在若干次调整操作之后,A能变成B,那么返回True
* 如果不能匹配成功,则返回false
* */
//1.定义两个字符串A,B
String strA = "abcde";
String strB = "cdeab";
boolean result = check(strA,strB);
System.out.println(result);
}
//作用:进行旋转操作,把左侧的字符移动到右侧去
//形参:旋转前的字符串
//返回值:旋转后的字符串
public static String getRotate(String strA){
StringBuilder sb = new StringBuilder();
char first = strA.charAt(0);
for (int i = 1; i < strA.length(); i++) {
char c = strA.charAt(i);
//将字符串从下标1开始存储到sb当中
sb.append(c);
}
//将下标为0的字符添加到最后
String str = sb.append(first).toString();
return str;
}
/*
* 另外两种旋转操作方法
* 1.用subString进行截取,把左边的字符截取出来拼接到右侧去
* 2.可以把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。
* */
/*//1.用subString进行截取,把左边的字符截取出来拼接到右侧去
public static String getRotate(String str){
//截取思路
//获取最左侧那个字符
char first = str.charAt(0);
//获取剩余的字符
String end = str.substring(1);
return end + first;
}*/
/*//2.可以把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。
public static String getRotate(String str){
//"ABC" ==> ['A','B','C']
char[] arr = str.toCharArray(); //将字符串str转换为字符数组arr
//拿到0索引上的字符
char first = arr[0];
//把剩余的字符依次往前挪一个位置
for (int i = 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
//把原来0索引上的字符放到最后一个索引
arr[arr.length - 1] = first;
//利用字符数组创建一个字符串对象
String result = new String(arr);
return result;
}*/
//作用:匹配旋转后的strA和strB
public static boolean check(String strA,String strB){
//strA=abcde
//1.bcdea
//2.cdeab
//3.deabc
//4.eabcd
//5.abcde
//因为字符串如果循环第6次,就和循环第一次一样了,所以只需要循环strA.length()次即可。
for (int i = 0; i < strA.length(); i++) {
strA = getRotate(strA); //将旋转后的字符串再赋值给strA
//如果B和A旋转后的re相同,则退出循环
if (strB.equals(strA)) {
return true;
}
}
return false;
}
}