acwing 字符串删减
题目
给定一个由 n 个小写字母构成的字符串。
现在,需要删掉其中的一些字母,使得字符串中不存在连续三个或三个以上的 x
。
请问,最少需要删掉多少个字母?
如果字符串本来就不存在连续的三个或三个以上 x
,则无需删掉任何字母。
输入格式
第一行包含整数 n。
第二行包含一个长度为 n 的由小写字母构成的字符串。
输出格式
输出最少需要删掉的字母个数。
数据范围
3≤n≤100
输入样例1:
6
xxxiii
输出样例1:
1
输入样例2:
5
xxoxx
输出样例2:
0
输入样例3:
10
xxxxxxxxxx
输出样例3:
8
题解
分析
- 使用双指针算法,使i和j动态变化,如果差值大于等于2,count++,最后输出
代码
#include "iostream"
using namespace std;
const int N=100;
char num[N]={0};
int main(){
int n,count=0;
cin>>n;
getchar();
for(int i=0;i<n;i++){
scanf("%c",num+i);
}
for(int i=0,j=0;j<n;j++){
if(num[j]!='x')i=j+1;
else if(j-i>=2)count++;
}
cout<<count;
}