#include<stdio.h>#include<string.h>#include<stdlib.h>#define SIZE 61char S[SIZE];void fun (char str[], int st, int fin) { //截取總字符串S的起點 st 到 終點 fin 的子串到str int i; int k = 0; for(i = st; i < fin; i ++, k ++){ str[k] = S[i]; } str[k] = '/0';}int main () { int L; int i,j,k; int len; //存儲字符串的總長 scanf("%d", &L); scanf("%s", S); char all_s[SIZE]; //最新最優的字符串的存儲 int all_i; //最新最優字符串的長度 int all = 0; //最新最優字符串的出現次數 int temp_num = 0; //臨時字符串的出現次數 char temp[SIZE]; //臨時字符串的存儲 char temp_e[SIZE]; //對于某臨時字符串的其他字符串的存儲 len = strlen(S); for(i = L; i < len; i ++){ //枚舉所以的字符串可能出現的長度 for(j = 0; j < len-i; j ++){ //枚舉該長度(i)的該字符串的起點 temp_num = 0; fun(temp,j,j+i); //j為起點,j+i-1為終點 for(k = 0; k < len-i;k ++){ //臨時字符串對比相同長度的字符串是否有相同 fun(temp_e,k,k+i); if(strcmp(temp_e,temp) == 0){ temp_num ++; } } if(temp_num > all){ //如果臨時字符串的出現次數多于上次最優的字符串的次數 直接代替 all_i = i; all = temp_num; strcpy(all_s,temp); } else if(temp_num == all && i > all_i){ //如果臨時字符串的與上次出現的最優字符串出現的次數相同且更長則代替 all_i = i; all = temp_num; strcpy(all_s,temp); } } } PRintf("%s",all_s); return 0;}
新聞熱點
疑難解答