zoukankan      html  css  js  c++  java
  • 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 }
     
  • 相关阅读:
    Django 路由层
    HTTP协议
    Python并发编程之协程
    Django配置KindEditor
    Django Form
    pymysql模块
    javascript获取URL参数代码(网络摘抄)
    javascript 实现飘动的广告(网络收藏,转)
    游标的使用
    javascript 一个很好用的日历控件(网络收藏,转)
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/6412574.html
Copyright © 2011-2022 走看看