直接按照题意模拟即可。
时间复杂度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点体力。