您的位置:首页 > 编程语言 > Go语言

蓝桥杯 ALGO-87 子串统计(stl)

2015-03-25 23:12 183 查看
【思路】:简单。试着用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: