Problem Statement
Snuke loves "paper cutting": he cuts out characters from a newspaper headline and rearranges them to form another string.
He will receive a headline which contains one of the strings S1,...,SnS1,...,Sn tomorrow. He is excited and already thinking of what string he will create. Since he does not know the string on the headline yet, he is interested in strings that can be created regardless of which string the headline contains.
Find the longest string that can be created regardless of which string among S1,...,SnS1,...,Sn the headline contains. If there are multiple such strings, find the lexicographically smallest one among them.
Constraints
- 1≤n≤501≤n≤50
- 1≤|Si|≤501≤|Si|≤50 for every i=1,...,ni=1,...,n.
- SiSi consists of lowercase English letters (
a
-z
) for every i=1,...,ni=1,...,n.
Input
Input is given from Standard Input in the following format:
nn
S1S1
......
SnSn
Output
Print the lexicographically smallest string among the longest strings that satisfy the condition. If the answer is an empty string, print an empty line.
Sample Input 1 Copy
Copy
3
cbaa
daacc
acacac
Sample Output 1 Copy
Copy
aac
The strings that can be created from each of cbaa
, daacc
and acacac
, are aa
, aac
, aca
, caa
and so forth. Among them, aac
, aca
and caa
are the longest, and the lexicographically smallest of these three is aac
.
Sample Input 2 Copy
Copy
3
a
aa
b
Sample Output 2 Copy
Copy
The answer is an empty string.
题意:
给你n个字符串,
找每个字符串都包含的字符,其个数为在字符串中出现次数最少的,用这些字符重新组成一个字典序最小的字符串。
S1 :cbaa
S2 :daacc
S3 :acacac
都含有的字符为a,c;
s1中a出现两次,c出现一次;
s2中a出现两次,c出现两次;
s3中a出现三次,c出现3次;
所以用a,a,c;构成一个字典序最小的字符串为aac;
代码:
#include<bits/stdc++.h>
using namespace std;
char s[500000];
int a[100][30];
char s2[500000];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
int len=strlen(s);
if(i==1)
{
for(int j=0;j<len;j++)
{
int x=s[j]-'a';
a[i][x]++;
}
}
if(i>1)
{
for(int j=0;j<len;j++)
{
int x=s[j]-'a';
a[i][x]++;
a[i][x]=min(a[i-1][x],a[i][x]);
}
}
}
int k=0;
for(int i=0;i<=25;i++)
{
if(a[n][i]>0)
{
for(int j=1;j<=a[n][i];j++)
{
s2[k++]='a'+i;
}
}
}
sort(s2,s2+k);
printf("%s",s2);
}