示例:输入abcabcabc,此时最小的子串是abc,长度为3,输出3.
直接给出代码进行讲解

import java.util.Scanner;
public class minstring {public static void main(String[] args) {// TODO Auto-generated method stubScanner in=new Scanner(System.in);String content=in.next();int length=content.length();boolean judge=false;//字符串转换为字符数组char[] test=content.toCharArray();for(int i=1;i<length;i++) {int ok=1;for(int j=i;j<length;j++) {if(test[j]!=test[j%i]) {ok=0;break;}}if(ok==1) {    System.out.println(i); judge=true;break;}}if(!judge) {System.out.println(length);}}}

思考:因为要求出最小的子串,那么最小就可能是1,然后再逐渐增大测试。由此考虑使用一个变量来记录字串长度(即代码中的i从1测试到length-1)。
然后对代码块关于j的for循环原理:

         for(int j=i;j<length;j++) {if(test[j]!=test[j%i]) {ok=0;break;}}

用上面数组[a,b,c,a,b,c,a,b,c]来讲解:

j%i的目的在于使得始终在子串长度0-i-1进行遍历
[a(0), b(1), c(2)
a(3,3%3=0),b(4,4%3=1),c(5,5%3=2)
a(6,6%3=0),b(7,7%3=1),c(8,8%3=2)]

当i=1时相当于此时考虑子串是[a]。循环j=1,j%i=0,test[1]!=test[0]成立,则不正确。
i=2同理
i=3时,考虑子串是[a,b,c].循环j=3,j%3=0,test[3]=test[0];j=4,j%3=1,test[4]=test[1]…j=8,test[8]=test[2]此时遍历完了字符串,所以最小子串是[a,b,c]

求周期字符串的最小子串相关推荐

  1. 求取字符串的最大子串

    子串定义:将给定的字符串去除任意个字符后,例如acb的子串有a.b.c.ab.ac.cb.acb. 子串大小:按照英文字母表的顺序进行排序,如acb的最大子串为cb. 代码如下: -- 求取字符串的最 ...

  2. 周期字符串的最小周期

    题目描述 右右喜欢听故事,但是右右的妈妈总是讲一些"从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有座山--"这样循环的故事来搪塞右右. 我们定义,如果一个 ...

  3. 求一个字符串中连续出现的次数最多的子串

    求一个字符串中连续出现的次数最多的子串.例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复 ...

  4. 求一个字符串中连续出现次数最多的子串

    http://blog.csdn.net/imcdragon/article/details/6838565解答二 http://hi.baidu.com/icyday315/item/040aada ...

  5. 【字符串问题】求一个字符串中重复出现的最长的子串

    2013-09-14 15:34:16 用后缀数组求一个字符串中重复出现的最长的子串. 用C++中的string类可以很方便地进行操作,需将后缀数组保存在vector<string>,如下 ...

  6. 字符串处理 —— 回文串相关 —— 求最长回文子串

    [暴力枚举] 求最长回文串最容易的方法就是暴力枚举,求出字符串的每一个子串,然后判断是不是回文,找到最长的那个回文串 求每一个子串的时间复杂度为 O(N^2),判断一个子串是不是回文时间复杂度为 O( ...

  7. 【算法题】求一个字符串的最长不重复子串

    [题目描述] 求一个字符串的最长不重复子串.比如:给定"abcabcbb"的答案是"abc",长度是3:给定"bbbbb"的答案是" ...

  8. 最大子串和与最小子串和

    做了牛客哈理工的一套训练赛的题目,真的是知识欠缺严重啊,首先补一下这个最大和最小子串和的问题. 求一个数组中连续一段和的最大值和最小值问题 最大值函数代码 ll maxsum() //最大和 {ll ...

  9. 寻找一个字符串的重复子串 后缀数组

    什么是后缀数组 令字符串 S=S[1]S[2]...S[n]S=S[1]S[2]...S[n]{\displaystyle S=S[1]S[2]...S[n]} , S[i,j]S[i,j]{\dis ...

最新文章

  1. CAS增加免登陆(Remember Me)功能
  2. html怎么建边框,如何使用CSS创建多色边框?
  3. mysql 按照in id顺序_Mysql查询结果顺序按in()中ID的顺序排列的案例区分
  4. SAP UI5 global configuration interface
  5. 什么是HOOK功能?
  6. 电脑的服务器操作系统是什么,电脑的服务器操作系统是什么
  7. 工程与ArcGIS api for javascript不在同一个tomcat情况下跨域问题
  8. 你真的会使用SQL Server的备份还原功能吗?之一:恢复模型
  9. 贪心科技机器学习训练营(五)
  10. windows7 使用激活工具激活系统出现的问题汇总
  11. 猫、路由器、交换机的区别
  12. 计算机中及格人数怎么算,在excel中如何计算及格率和优秀率及统计各分数段人数...
  13. 蓝牙耳机按键事件linux,【记录】Android监听蓝牙耳机的按键事件
  14. 电动汽车换电池要多少钱?各品牌电池更换费用大起底!
  15. 千耘导航助力新疆精河县数万亩棉花播种
  16. Java Security:Java加密框架(JCA)简要说明
  17. 时间序列预测11:用电量预测 01 数据分析与建模
  18. 序列密码知识整理(四 典型序列密码算法A5,RC4)
  19. 硅步机器人-Shadow先进仿人灵巧手
  20. TP5后端,VUE前端请求聚合数据成语大全

热门文章

  1. Java笔记-Java中桥接模式
  2. Qt工作笔记-WebEngineView调用web站点中的JS脚本(含Vue Cli脚本)
  3. Arduino笔记-Arduino UNO与WeMos D1串口通信(数据交互)
  4. Java工作笔记-Spring Boot中使用Mybatis操作达梦数据库
  5. Spring Boot笔记-jQuery使用load进行异步调用
  6. Spring Boot中实现简单表单提交(登录功能)
  7. 系统架构师学习笔记-软件架构设计
  8. 软件设计师习题笔记-重点习题五
  9. linux losetup命令,losetup命令_Linux losetup 命令用法详解:设定与控制循环(loop)设备...
  10. linux下cabal安装教程,Centos 7 安装shellcheck