题解:P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)
题目大意:
给你一个字符串保证全都是小写字母,问是否满足条件:
- 该字符串需要包括 26 个小写字母
- 该字符串的一个字串(不包括本身)是否满足条件 1。
若两个条件都满足输出 Yes,否则输出 No 并输出它不满足的条件。
思路:
利用 map 存储每个字符的信息,若该字符串不包括
然后子串肯定选取的越长越好,既然不能包括本身,那么要么选取字串为 abcdefghijklmnopqrstuvwxyz 其本身满足条件 1,但子串选取时最长只能是 bcdefghijklmnopqrstuvwxyz 或 abcdefghijklmnopqrstuvwxy 由于无法包括的字符只出现了一次,选取的子串无法包括,不能满足条件 2。
代码:
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
int t;
map<char,int>m;
void solve(){
string a;
cin >> a;
m.clear();
if(a.size() < 26){cout << "No\n1 2\n";return;}
for(auto x:a)m[x] ++;
for(int i = 0;i < 26;i ++){
if(m['a' + i] == 0){//本身缺少字符
cout << "No\n1 2\n";return;
}
}
if(m[a[a.size() - 1]] == 1 and m[a[0]] == 1){//需要舍弃的字符只出现过一次
cout << "No\n2\n";
}else{
cout << "Yes\n";
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> t;
while(t --){
solve();
}
return 0;
}