最长相等子序列

这是一篇关于计算字符串经过最多k次操作后,最长相等子序列长度的算法题解。题目要求将字符串中每个字符最多改变为相邻字符,并寻找最长的相等子序列。示例给出了输入参数和返回值,解题思路是通过遍历所有可能的目标字符,计算转换到该字符所需的步数,然后找出在限制步数内能转换的最长子序列。
摘要由CSDN通过智能技术生成

链接:https://ac.nowcoder.com/acm/contest/9715/B
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
给出一个仅包含小写字母的字符串s,你最多可以操作k次,使得任意一个小写字母变为与其相邻的小写字母(ASCII码差值的绝对值为1),请你求出可能的最长相等子序列(即求这个字符串修改至多k次后的的一个最长子序列,且需要保证这个子序列中每个字母相等)。

子序列:从原字符串中取任意多个字母按照先后顺序构成的新的字符串。
示例1
输入
2,“abcde”
返回值
3
示例2
输入
10,“acesxd”
返回值
4
备注:
来源:牛客网
1<=|s|<=2^10 ,1≤k≤3000,其中|s|表示字符串的长度。
题解:每个字母一次变化只能变成比这个字母大1或者小1的字母,a<=每个字母<=z,用a—z去遍历一遍,若都换成a时,每个字母需要的步数存在一个数组中,对这个数组进行排序,判断不超过k步时,最多能交换几个字母,同理,都换成b时…,换成z时…取这个数量的最大值
代码如下:

#include<stdio.h>
#include<string.h>
char s[5000],k;
int string2(int k, char* s )
{
   
    int i,l,t,v,a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值