nyoj 1112 求次数(map, set)

Posted 琴影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nyoj 1112 求次数(map, set)相关的知识,希望对你有一定的参考价值。

求次数

时间限制: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)的主要内容,如果未能解决你的问题,请参考以下文章

nyoj 46-最少乘法次数 (递推)

求字符串出现次数最多的字符及次数

NYOJ 353 3D dungeon bfs

nyoj 95-众数问题 (map)

nyoj_95_众数问题_map练习

NYOJ 542 试制品(第五届河南省省赛)