给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。

题目描述

字符串旋转:

给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。

例如:如果A=‘youzan’,B=‘zanyou’,A按‘you’‘zan’切割换位后得到‘zanyou’和B相同返回true。

解题思路一

暴力枚举,通过设置一个变量,在字符串A中移动,分割出字符串c和d,c再将其组合成字符串e,通过比较字符串e和B是否相等,得出结论

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String b = sc.nextLine();
        test(a,b);
        sc.close();
    }
    public static void test(String s, String b) {
        int a = s.length();                                 //设置循环条件
        int i =1;

        while(i<a){
            if(s.length()!=b.length()) break;
            String c = s.substring(0,i);                    //将字符串a进行分割
            String d = s.substring(i);
            String e = d+c;                                 //分割后的字符串进行重组
            System.out.println("c:"+c+"  d:"+d+"  e:"+e);   //查看循环的过程
            if(e.equals(b)){                                //比较字符串是否相等,此处如果用==将会报错
                System.out.println("true");
            }else {
                System.out.println("false");
            }
            i++;
        }
    }
}

解题思路二

分割字符串A为c和d,查看c和d是否为b的字串

题目来自牛客网

参考答案来自:仲夏的田野

知识点

equals()

Java中字符串的比较直接使用“==”时,如果参数均为固定的值,比较结果正确,而当比较双方指向不同对象时,结果将会出错,所以字符串比较应该使用equals();

	String a="abc";
	String b="abc";
	return (a==b); //结果为true

	String c = new String("abc");
	String d = new String("abc");
	return (c==d); //结果为false

B.contians(A)

判断B中是否包含有A,有则返回true,否则返回false