整数删除——蓝桥杯2023年底十四届省赛真题

本文介绍了如何使用贪心算法解决一个关于字符串中连续子串包含相同字符的问题,涉及局部分析策略和处理问号的情况。同时提到了在编译代码时需要注意将字符串大小转换为整型以避免错误。
摘要由CSDN通过智能技术生成

1.题目

2.思路分析

贪心算法

这道题可以用贪心算法这道题的关键在于局部整体的定义

我们可以把字符串从左到右进行局部分析局部分析是指我们分析我们前面输入的内容遍历这个数后面的数我们暂且不考虑

假设我们已经遍历到了Si这个数使Si-1这个数计算我们就优先看Si因为Si之后的数对于Si-1这个数的选择没有作用的如果Si-1这个数已经被当做子串了,我们再看后面这个数

对于问号这个问题还是一样的思路Si-1是否占用再看Si+1

这道题算是较为简单的一道贪心算法

3.代码

#include<bits/stdc++.h>
#define deb(x) cout<< #x << "=" <<x<<'\n'
#define INF 0x3f3f3f
using namespace std;

void solve()
{
	string s;
	cin>>s;
	vector<bool>st(s.size());
	int ans=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]!='?')
		{
			if(i-1>=0 && s[i]==s[i-1]&&!st[i])
			{
				st[i]=st[i-1]=true;
				ans++;
			}
		    else if(i+1<s.size() && s[i+1]=s[i]&&!st[i])
		    {
		    	st[i]=st[i+1]=true;
		    	ans++;
			}
		}
		else
        {
        	if(st[i])
        	{
        		continue;
			}
			else if(i-1>=0 && !st[i-1])
			{
				st[i-1]=st[i]=true;
				ans++;
			}
			else if(i+1<s.size()&&!st[i+1])
			{
				st[i]=st[i+1]=true;
				ans++;
			}
		}
	}
	cout<<ans<<endl;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	solve();
}

.编译时应注意

代码写到蓝桥杯官网的时候编译器报错

这个表示s.size()(s是string类)是无符号数int i两者不能进行比较所以说我们应该在s.size()加入(int)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值