码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj 1112 求次数(map, set)

时间:2017-02-18 10:53:12      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:长度   family   style   个数   pac   space   i++   edit   sub   

求次数

时间限制: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

分析:关键是将出现过的字符串保存起来,判断一个新的字符串是否在之前保存的字符串集合中出现过,若出现过,则ans++
可以用map或者set
 1 #pragma warning(disable:4786)
 2 #include <iostream>
 3 #include <string>
 4 #include <set>
 5 #include <cstdio>
 6 using namespace std;
 7 
 8 int main(){
 9     int t, n, ans;
10     set<string> st;
11     string str, ss;
12     char s[100000];
13     scanf("%d", &t);
14     while(t--){
15         st.clear();
16         ans = 0;
17         scanf("%d", &n);
18         scanf("%s", s);
19         str = s;
20         int lens = str.length();
21         for(int i = 0; i < lens - n + 1; i++){
22             int len = st.size();
23             ss = str.substr(i, n);
24             st.insert(ss);
25             if(len == st.size())//用插入子串之前的set集合大小和之后的大小比较,判断是否出现过,也可以用st.find(ss) ?= st.end()
26                 ans++;
27             else
28                 len = str.size();
29         }
30         cout << ans << endl;
31     }
32     return 0;
33 }

 

map:

 1 #include <iostream>
 2 #include <string>
 3 #include <map>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 int main(){
 8     int t, n, ans;
 9     map<string, int> mp;
10     string str, ss;
11     char s[100000];
12     scanf("%d", &t);
13     while(t--){
14         mp.clear();
15         ans = 0;
16         scanf("%d", &n);
17         scanf("%s", s);
18         str = s;
19         int lens = str.length();
20         for(int i = 0; i < lens - n + 1; i++){
21             ss = str.substr(i, n);
22             if(mp[ss] == 1)
23                 ans++;
24             mp[ss] = 1;
25         }
26         cout << ans << endl;
27     }
28     return 0;
29 }

 

 

nyoj 1112 求次数(map, set)

标签:长度   family   style   个数   pac   space   i++   edit   sub   

原文地址:http://www.cnblogs.com/qinduanyinghua/p/6412574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!