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

后缀字符串 计蒜客模拟赛

时间:2019-02-02 12:56:26      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:text   lap   scan   for   3.0   splay   ext   vertica   list   

一天蒜头君得到 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

 

后缀字符串 计蒜客模拟赛

标签:text   lap   scan   for   3.0   splay   ext   vertica   list   

原文地址:https://www.cnblogs.com/stul/p/10348064.html

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