最少相異字母
題解
我們可以利用set去讓重複字消失,並且只記錄有出現過那些字,取其長度之後,去跟min_l做比較,我有三種情況:
- 1.$min_l<length$ 無事發生,無須執行
- 2.$min_l>length$ 把
length更新為新的最小相異字母數,並且更新紀錄哪個字為最小字典序的 - 3..$min_l=length$ 比較兩個字典序的大小,並且更新記錄最小字典序的
AC Code
python
from sys import stdin
n=int(stdin.readline().strip())
min_l=float('inf')
out=[]
for i in range(n):
x=stdin.readline().strip()
length=len(set(x))
if length<min_l:
min_l=length
out=[x]
elif length==min_l:
out.append(x)
data=sorted(out)
print(data[0])
C++
#include<bits/stdc++.h>
using namespace std;
int count_distinct(const string& s){
set<char> distinct_chars;
for(char c : s){
distinct_chars.insert(c);
}
return distinct_chars.size();
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;
int min_l = INT_MAX;
string best_s="";
for(int i=0;i<n;i++){
string x;
cin>>x;
int length=count_distinct(x);
if(length<min_l){
min_l=length;
best_s=x;
}else if(length==min_l){
if(x<best_s){
best_s=x;
}
}
}
cout<<best_s<<endl;
return 0;
}