您的位置:首页 > 其它

【南理oj】1112 - 求次数(STL - map & string)

2016-06-15 23:41 253 查看
点击打开题目


求次数

时间限制:1000 ms  |  内存限制:65535 KB
难度:2

描述

题意很简单,给一个数n 以及一个字符串str,区间【i,i+n-1】 为一个新的字符串,i 属于【0,strlen(str)】如果新的字符串出现过ans++,例如:acmacm n=3,那么 子串为acm cma mac acm ,只有acm出现过

求ans;

输入LINE 1: T组数据(T<10)

LINE 2: n ,n <= 10,且小于strlen(str);

LINE 3:str

str 仅包含英文小写字母 ,切长度小于10w
输出求 ans
样例输入
2
2
aaaaaaa
3
acmacm


样例输出
5
1


上传者ACM_王亚龙

这道给cmp字符串赋值用 for 循环就超时了,用 string 的函数就可以。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
#define MAX 100000
using namespace std;
string a;
int main()
{
int u;
int l;
int la;
int ans;
map<string,int> num;
scanf ("%d",&u);
while (u--)
{
string cmp;
num.clear();
ans = 0;
scanf ("%d",&l);
cin >> a;
la = a.size(); //a的长度
for (int i = 0 ; i <= la - l ; i++)
{
// for (int j = 0 , k = i; j < l ; j++,k++) //构造新字符串
// cmp[j] = a[k];
// cmp[l] = '\0';
//====这么写会超时====
cmp = a.substr(i,l);
if (num[cmp] != 0)
ans++;
else
num[cmp]++;
}
printf ("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: