直接按照题意模拟即可。
时间复杂度O(N)
c++
#include <iostream>
#include <cstdio>
using namespace std;
int n,k;
string s;
int main(){
	cin>>n>>k;
	cin>>s;
	for(int i=1;i<s.length();i++){
		k-=s[i]-s[i-1];
		if(k<0) break;
	}
	if(k<0) cout<<-1;
	else cout<<k;
	
	return 0;
}
java
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        scanner.nextLine();
        String s = scanner.nextLine();
        
        for (int i = 1; i < s.length(); i++) {
            k -= s.charAt(i) - s.charAt(i - 1);
            if (k < 0) {
                break;
            }
        }
        
        if (k < 0) {
            System.out.println(-1);
        } else {
            System.out.println(k);
        }
    }
}
python
n, k = input().strip().split(" ")
n = int(n)
s = input()
k = int(k)
for i in range(1, len(s)):
    k -= int(ord(s[i]) - ord(s[i - 1]))
    if k < 0:
        break
if k < 0:
    print(-1)
else:
    print(k)
        小红又在打游戏了。
这款游戏有n个关卡,小红必须从第一个关卡开始,逐关打通到第n关,才能获得胜利。
小红初始有k点血,每关的Boss有ai点血(以字符形式呈现)。由于小红点了秘技,打赢第ai+1个Boss消耗的血量将会是ai+1−ai(如果为负,那么小红会恢复ai−ai+1的血)。同时,小红只有降到0血以下时,才会失败。
小红想知道,当他打完n关时,还剩多少血?如果小红无法通关,请输出−1。
第一行两个整数n,k(1≤n,k≤105)。
第二行一个长度为n字符串s。
一行一个整数,表示他的剩余体力值。若无法走到,则输出-1。
输入
3 2
aaa
输出
2
说明
小红开始在第一关,挑战第二关时,消耗体力为0。
在第二关挑战第三关时,消耗体力为0。
最终剩余2点体力。