问题 D: 删除回文子序列

题目描述

这是营长的一题签到题~免费送给大家

给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文子序列。

输出删除给定字符串中所有字符(直到字符串为空)的最小删除次数。

「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。

「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。

输入

测试样例由多组测试数据组成。每组测试数据第一行输入一个字符串s ( 1 <= s.length <= 100000 )

输出

每组测试数据输出给定字符串的最小删除次数

样例输入

abb
baabb

样例输出

2
2

提示

第一组样例:解释:“abb” -> “bb” -> “” 先删除回文子序列 “a”,然后再删除 “bb”。
第二组样例:解释:“baabb” -> “b” -> “” 先删除回文子序列 “baab”,然后再删除 “b”。

思路

这真的很简答!!!!千万不要被提示忽悠
这题就两个答案 要么回文只需要1次 要么先删a在删b就是两次
我们只需要判断他是不是回文就行了

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a;
	while(getline(cin,a)){
		int l=0;
		int f=1;
		int r=a.length()-1;
		while(l<r){
			if(a[l]!=a[r]){
				f=0;
				break;
			}
			l++;
			r--;
		}
		if(f)cout<<"1"<<endl;
		else cout<<"2"<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值