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