链接: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