演算法訓練 字串統計 (暴力)
阿新 • • 發佈:2019-02-05
問題描述
給定一個長度為n的字串S,還有一個數字L,統計長度大於等於L的出現次數最多的子串(不同的出現可以相交),如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。
輸入格式
第一行一個數字L。
第二行是字串S。
L大於0,且不超過S的長度。 輸出格式 一行,題目要求的字串。
輸入樣例1:
4
bbaabbaaaaa
輸出樣例1:
bbaa
輸入樣例2:
2
bbaabbaaaaa
輸出樣例2:
aa 資料規模和約定 n<=60
S中所有字元都是小寫英文字母。 提示
第二行是字串S。
L大於0,且不超過S的長度。 輸出格式 一行,題目要求的字串。
輸入樣例1:
4
bbaabbaaaaa
輸出樣例1:
bbaa
輸入樣例2:
2
bbaabbaaaaa
輸出樣例2:
aa 資料規模和約定 n<=60
S中所有字元都是小寫英文字母。 提示
列舉所有可能的子串,統計出現次數,找出符合條件的那個
#include<cstdio> #include<cstring> int main(){ char s[100],t[100]; int n,l,it,jt,maxx; it=jt=maxx=0; scanf("%d %s",&l,s); n=strlen(s); for(int i=l;i<=n;i++){ for(int j=0;j+i<=n;j++){ int cnt=1,flag; for(int k=1;k<=n-i-j;k++){ flag=1; for(int e=j+k;e<j+k+i;e++){ if(s[e-k]!=s[e]){ flag=0; break; } } if(flag) cnt++; } if(cnt>maxx||(i>it&&cnt==maxx)){ it=i; jt=j; maxx=cnt; } } } for(int i=0;i<it;i++) printf("%c",s[jt+i]); return 0; }