• 后缀字符串 计蒜客模拟赛


    一天蒜头君得到 nnn 个字符串 sis_isi,每个字符串的长度都不超过 101010。

    蒜头君在想,在这 nnn 个字符串中,以 sis_isi 为后缀的字符串有多少个呢?

    输入格式

    第一行输入一个整数 nnn。

    接下来 nnn 行,每行输入一个字符串 sis_isi

    输出格式

    输出 nnn 个整数,第 iii 个整数表示以 sis_isi 为后缀的字符串的个数。

    数据范围

    对于 50%50\%50% 的数据,1≤n≤1031 le n le 10^31n103。

    对于 100%100\%100% 的数据,1≤n≤1051 le n le 10^51n105。

    所有的字符串仅由小写字母组成。

    样例输入

    3
    ba
    a
    aba

    样例输出

    2
    3
    1


    用map和string配合使用。代码很短。
    其中string里面的substr()函数,
    s.substr(0,5)返回的是s里面0-4这五个字符。
    s.substr(5) 返回的是s里面第5个到末尾的所有字符。
    所以这个题目,就可以讲输出的字符串存到map<string,int>里面。 每一个子串的数量从0开始,mp【子串】++计数。然后直接输出map【s[i]】,也就是后缀字符串的数量了。
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <map>
     5 using namespace std;
     6 const int maxn = 1e5+9;
     7 int n;
     8 string s[maxn];
     9 map<string,int> mp;
    10 int main()
    11 {
    12     scanf("%d",&n);
    13     for(int i = 0; i < n; i++)
    14     {
    15         cin>>s[i];
    16         for(int j = 0; j < s[i].length(); j++)
    17             mp[s[i].substr(j)]++;
    18     }
    19     for(int i = 0; i < n; i++)
    20         cout<<mp[s[i]]<<endl;
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    Identifier expected after this token
    需要整理的
    Context
    SharedPreferences
    一些常规注意事项
    一个点亮屏幕的service
    BroadcastReceiver中调用Service
    BroadcastReceiver
    Service
    微服务简介
  • 原文地址:https://www.cnblogs.com/stul/p/10348064.html
Copyright © 2020-2023  润新知