//java超时版50分
import java.util.Scanner;
//50分 超时
public class Main {
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
String str[];
int n;
n=sca.nextInt();
sca.nextLine();
str=new String[n];
for(int i=0;i<n;i++) {
str[i]=sca.nextLine();
}
for(int i=0;i<n;i++) {
int t1=str[i].length();
int x=0;
out2: for(int j=0;j<n;j++ ) {
int t2=str[j].length();
if(t2<t1) {
continue;
}
else {
for(int k=0;k<t1;k++) {
if(str[i].charAt(k)!=str[j].charAt(t2-t1+k)) {
continue out2;
}
}
}
x++;
}
System.out.println(x);
}
}
}
//官网题解
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
string a[N];
int main() {
map<string, int> mp;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
for (int j = 0; j < a[i].size(); j++) {
mp[a[i].substr(j)]++;
}
}
for (int i = 0; i < n; i++) {
cout << mp[a[i]] << endl;
}
return 0;
}
分析:我用的时间复杂度可为O(n),当n=时就会超时
官网用map(STL关联容器)方法解决,用到库函数,可以说是方便高效。