专栏文章
题解:P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)
P14317题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @min41kv7
- 此快照首次捕获于
- 2025/12/01 20:13 3 个月前
- 此快照最后确认于
- 2025/12/01 20:13 3 个月前
题目大意:
给你一个字符串保证全都是小写字母,问是否满足条件:
- 该字符串需要包括 26 个小写字母
- 该字符串的一个字串(不包括本身)是否满足条件 1。
若两个条件都满足输出
Yes,否则输出 No 并输出它不满足的条件。思路:
利用
然后子串肯定选取的越长越好,既然不能包括本身,那么要么选取字串为 ,要么为 。那么只需要判断是否开头和末尾的字符是否都只出现了一次,即选取了 就缺失最后一个字符,选取了 就缺失第一个字符,举个例子:对于字符串
map 存储每个字符的信息,若该字符串不包括 说明两个条件都不满足(若本身不包括,字串不可能凭空造一个吧)。然后子串肯定选取的越长越好,既然不能包括本身,那么要么选取字串为 ,要么为 。那么只需要判断是否开头和末尾的字符是否都只出现了一次,即选取了 就缺失最后一个字符,选取了 就缺失第一个字符,举个例子:对于字符串
abcdefghijklmnopqrstuvwxyz 其本身满足条件 1,但子串选取时最长只能是 bcdefghijklmnopqrstuvwxyz 或 abcdefghijklmnopqrstuvwxy 由于无法包括的字符只出现了一次,选取的子串无法包括,不能满足条件 2。代码:
CPP#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;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...