字符串移位包含问题(计蒜客)

1.题目原文

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串 s1 和 s2​,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCDACBD则不能通过多次移位来得到其中一个字符串是新串的子串。

输入格式

一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过 30。

输出格式

如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出"true",否则输出"false"

输出时每行末尾的多余空格,不影响答案正确性

样例输入

AABCD CDAA

样例输出

true

2.题目分析及所用函数

2.1题目分析

根据题目可知,1.需要进行循环移位操作,因此可以写一个函数做循环移位,2.进行两个串之间的包含比较,判断二者哪一个比较长,让长的字符串进行移位操作,每次移位操作完成以后进行一次比较,如果有包含则输出“true”,直到最后一个如果依然没有包含关系则输出false

2.2所用函数

str1.contains(str2) 用于判断str1是否包含str2

str.length() 得到字符串的长度

str.toCharArray() 将str变为一个字符数组(这个方法的返回值是一个字符数组)

3.题解源代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String str1 = scanner.next();
        String str2 = scanner.next();
        if(str1.length()==str2.length())  //如果长度相等直接输出false
            System.out.println("false");
        else if(str1.contains(str2)||str2.contains(str1)) //如果不用移位操作就有包含关系直接输出true
                System.out.println("true");
        else if(str1.length()>str2.length()) {
                    for (int i = 0; i < str1.length(); i++) {
                        str1 = move(str1);
                        if (str1.contains(str2)) {
                            System.out.println("true");
                            break;
                        }else if (i==str1.length()-1) {
                            System.out.println("false");
                        }
                    }
                }
        else {
            for (int i = 0; i < str2.length(); i++) {
                str2 = move(str2);
                if (str2.contains(str1)) {
                    System.out.println("true");
                    break;
                }else if (i==str2.length()-1) {
                    System.out.println("false");
                }
            }           
        }
    }
    public static String move(String str) {   //函数用于串的移位操作
        String ss = "";
        char [] arr = str.toCharArray();
        char temp = arr[arr.length-1];
        for (int i = arr.length-1; i > 0; i--) {
            arr[i]=arr[i-1];
        }
        arr[0]=temp;
        for (int i = 0; i < arr.length; i++) {
            ss += arr[i];
        }
        return ss;
    }
}

如果这篇文章对您有用,点个赞吧,有什么疑问可以下方评论,我看到了都会回答。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值