链接:https://ac.nowcoder.com/acm/problem/20443
来源:牛客网
题目描述
某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。
输入描述:
第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N ≤ 200,单词长度不超过10^6
输出描述:
输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。
示例1
输入
输出
我对字符串还是不怎么熟悉,一开始用char折腾半天,后面看到大佬都用的string处理,发现确实好多了。基本上是一个字符匹配算法。
#include<bits/stdc++.h> using namespace std; string s[205]; int axs(int x,int y) { string a=s[x],b=s[y]; int i,j,count,s=0; int len1=a.length(),len2=b.length();//a,b串长 if(len1>len2)//如果a比b长直接不需要比较了,将没有配对的 return 0; for(i=0;i<=len2-len1;i++)//len2-len1表示有几次配对机会-1 { if(a[0]==b[i])//在b中找到与a的首字母匹配的对象再继续进行比较下去 { count=0;//统计匹配成功次数 for(j=0;j<len1;j++) { if(a[j]==b[i+j])//暴力匹配 { count++; } } if(count==len1)//将a检测完后表示匹配一次 { s++; } } } return s; } int main() { int sum; int n; cin>>n; int i,j; for(i=0;i<n;i++)//输入N行数据 { cin>>s[i]; } for(i=0;i<n;i++)//用第i个分别与第J个进行比较 { sum=0; for(j=0;j<n;j++) { sum+=axs(i,j); } cout<<sum<<endl;//当第i个与最后一个j比较完后输出结果 } }