日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求周期字符串的最小子串

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求周期字符串的最小子串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

示例:輸入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]

總結

以上是生活随笔為你收集整理的求周期字符串的最小子串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。