周期串问题

本文介绍了一个Java程序,通过Scanner读取用户输入的字符串,检查其是否存在周期子串。程序使用双重循环遍历字符串,若找到不符合周期规律的字符,则输出相关信息并继续搜索。核心是判断字符是否重复出现的周期性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

package com.dd;

import java.util.Scanner;

/**
 * @Package: com.dd
 * @ClassName: Str
 * @Author: 东方不败
 * @CreateTime: 2020-09-23 22:15
 * @Description:
 */
public class Str {

    public static void main(String[] args) {
        boolean flag = true;
        int i;
        System.out.print("请输入:");
        String str = new Scanner(System.in).nextLine();
        //判断当前的字符串长度是否为0
        if (str.length() != 0 && str.length() <= 60) {
            //当前第 i 子串
            for (i = 1; i < str.length(); i++) {
                flag = true;
                //第 j = i 位开始往后找
                for (int j = i; j < str.length(); j++) {

                    //判断是否子串,如果不是则跳出循环
                    if (str.charAt(j) != str.charAt(j % i)) {
                        System.out.println("j索引: " + j + ", i索引: " + i + ", j%i: " + j % i + ", j下标所对应的字符串: " + str.charAt(j) + ", j%i所对应的字符串: "
                                + str.charAt(j % i) + ",   str.charAt(j)不等于str.charAt(j%i)");
                        flag = false;
                        System.out.println("flag状态:" + flag + "=============跳出内层循环,i+1,重置flag状态为true");
                        System.out.println();
                        //跳出内层循环
                        break;
                    }
                    //如果是子串,对j进行遍历
                    System.out.println("j下标: " + j + ", i索引: " + i + ", j%i: " + j % i + ", j下标所对应的字符串: " + str.charAt(j) + ", j%i所对应的字符串: "
                            + str.charAt(j % i) + ",    str.charAt(j)等于str.charAt(j%i)");
                    System.out.println("flag状态:" + flag + "================遍历j");
                    System.out.println();
                }

                //输出子串的长度 子串的长度即为外层循环i的下标
                // 如果没有经过内层循环  就不会改变flag的状态  就能找到最小子串的长度
                if (flag) {
                    System.out.println("子串的长度为:" + i);
                    //跳出外层循环
                    break;
                }
                //子串中没有周期串的情况  即输出字符串的总长度
                if (i == str.length() - 1) {
                    System.out.println("字符串中没有串中的长度为:" + str.length());
                }
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值