【思路】:简单。试着用stl做了一下。需要注意的地方是,结果是输出长度大于n的出现次数最多的,如果一样输出最长,再一样输出最先出现。
【AC代码】:
#include <iostream> #include <algorithm> #include <vector> #include <cstdio> #include <cstring> using namespace std; #define MAX 60+5 struct SubStr { char str[MAX]; int t; }; vector<SubStr> substr; vector<SubStr>::iterator Iter; void check(char temp[]) { int flag = 1; for (Iter = substr.begin(); Iter != substr.end(); Iter++) { if (!strcmp(((*Iter).str), temp)) { (*Iter).t++; return; } } if (flag) { SubStr ss; strcpy(ss.str, temp); ss.t = 1; substr.push_back(ss); } } int main() { //freopen("in.txt", "r", stdin); int n = 0, i = 0, j = 0, k = 0; char str[MAX]; //input cin >> n; cin >> str; for (i = 1; i < strlen(str); i++) { for (j = 0; j <= i; j++) { int l = 0; char temp[MAX];; for (k = j; k <= i; k++) { temp[l++] = str[k]; } temp[l] = '\0'; check(temp); } } //output int max_t = 0, max_len = 0; char res[MAX]; for (Iter = substr.begin(); Iter != substr.end(); Iter++) { if (strlen((*Iter).str) >= n) { if ((*Iter).t > max_t) { max_t = (*Iter).t; strcpy(res, (*Iter).str); max_len = strlen((*Iter).str); } else if ((*Iter).t == max_t) { if (strlen((*Iter).str) > max_len) { max_t = (*Iter).t; strcpy(res, (*Iter).str); max_len = strlen((*Iter).str); } } } } if (n != 0) cout << res; }
原文:http://blog.csdn.net/weijj6608/article/details/44629995