记录31
#include <bits/stdc++.h>
using namespace std;
int main(){
int k,cnt=1;
string s;
cin>>k;
cin>>s;
for(int i=1;i<s.size();i++){
if(s[i]==s[i-1]) cnt++;
else cnt=1;
if(cnt==k){
cout<<s[i];
return 0;
}
}
cout<<"No";
return 0;
}
题目传送门
https://www.luogu.com.cn/problem/B2126
突破点
字符串中第一个连续出现次数不低于
k次的字符。如果没有符合条件的字符,输出No。👉统计字符串中某个字符的个数
思路
- 遍历整个字符串
- 遇到连续的字符进行统计
- 不连续的字符重新计数
- 判断输出情况
代码简析
#include <bits/stdc++.h>
using namespace std;
int main(){
int k,cnt=1;
string s;
cin>>k;
cin>>s;
for(int i=1;i<s.size();i++){
...
...
}
...
return 0;
}
k代表需要找到的次数,cnt字符串计数统计
for循环遍历整个字符串,扫码每一个字符,然后进行计数
#include <bits/stdc++.h>
using namespace std;
int main(){
int k,cnt=1;
string s;
cin>>k;
cin>>s;
for(int i=1;i<s.size();i++){
if(s[i]==s[i-1]) cnt++;
else cnt=1;
if(cnt==k){
cout<<s[i];
return 0;
}
}
cout<<"No";
return 0;
}
if(s[i]==s[i-1]) cnt++; 如果前一个字符等于现在的字符,cnt开始计数统计
注意:因为i是从1开始,没有统计第一个字符,直接从第二个字符开始对比
else cnt=1; 如果前一个字符不等于现在这个字符,那么从现在这个字符开始重新计数
if(cnt==k){...} 每判断一个字符就会进行一次比较,看看符合出现的次数吗
如果符合就直接cout<<s[i];输出这个字符,然后return 0;结束程序
cout<<"No"; 从头扫描到尾都没有找到合适的字符,输出No
注意:输出yes与no这样的英文单词时候,一定要注意大小写的情况
补充
在算法竞赛中,字符串是一种常用的数据类型,具有多种应用和处理方式。以下是字符串的用法及处理手段的条理清晰说明:
字符串的用法
表示文本信息:用于存储和处理文本数据,如单词、句子、段落等。
模式匹配:在文本中查找特定模式或子字符串。
文本比较:比较两个字符串的大小或判断是否相等。
文本转换:对字符串进行加密、解密、编码或解码等操作。
数据存储:以字符串形式存储结构化或非结构化的数据。
处理字符串的常用手段
遍历字符串:
逐字符处理:逐个访问字符串中的字符,进行操作如统计字符频率、转换大小写等。
示例:统计每个字符在字符串中出现的次数。
字符串匹配:
暴力匹配:简单的逐字符比较,适用于小规模数据。
KMP算法:利用部分匹配表避免重复匹配,提高效率。
Boyer-Moore算法:从右向左匹配,跳过不可能匹配的部分,快速查找子字符串。
子字符串操作:
提取子字符串:根据起始和结束位置获取字符串的一部分。
替换子字符串:将字符串中的特定部分替换为其他内容。
分割字符串:按特定分隔符将字符串分割为多个子字符串。
字符串比较和排序:
字典序比较:根据字符的ASCII值进行比较,判断字符串的大小关系。
自定义排序:根据特定规则对字符串数组进行排序,如按长度、按特定字符等。
字符串哈希:
计算哈希值:将字符串转换为哈希值,用于快速比较和查找。
应用场景:检测字符串是否相同、查找重复字符串等。
动态规划:
最长公共子序列(LCS):通过动态规划找出两个字符串的最长公共子序列。
编辑距离:计算将一个字符串转换为另一个字符串的最少操作次数。
前缀函数和KMP算法:
计算前缀函数:用于查找字符串中每个位置的最大相同前后缀长度。
模式匹配:利用前缀函数实现高效的子字符串查找。
字符串编码和解码:
Base64编码:将二进制数据转换为Base64编码的字符串。
URL编码:将特殊字符转换为可安全用于URL的形式。
正则表达式:
模式匹配:使用正则表达式定义复杂的匹配规则,查找符合条件的字符串。
文本替换:根据正则表达式匹配的结果进行文本替换。
字符串的前缀和后缀处理:
前缀树(Trie):构建前缀树用于快速查找具有相同前缀的字符串。
后缀数组:用于处理字符串的后缀相关问题,如查找最长重复子串。
字符串的反转和旋转:
反转字符串:将字符串中的字符顺序完全颠倒。
旋转字符串:将字符串的一部分移到另一端,实现循环移位。
字符串的压缩和解压缩:
Run-Length Encoding (RLE):通过统计连续重复字符的次数来压缩字符串。
解压缩:将压缩后的字符串恢复为原始形式。
字符串的统计分析:
字符频率统计:统计每个字符在字符串中的出现次数。
子字符串频率统计:统计特定子字符串在字符串中出现的次数。
字符串的加密和解密:
简单加密算法:如凯撒密码、替换密码等。
复杂加密算法:如AES、RSA等,用于保护字符串数据的安全。
字符串的输入和输出:
格式化输入:从输入流中读取字符串,处理不同格式的输入。
格式化输出:将字符串以指定格式输出,如限制长度、添加前缀或后缀等。
1092

被折叠的 条评论
为什么被折叠?



