题解
思维:
- croak 这是青蛙会发出的声音。
- 定义cnt 来分别记录 c 叫了几声,r 叫了几声,o叫了几声,a叫了几声,k叫了几声。
- 定义pre来记录每个叫声的前一个叫声。 如果当前为‘c’, 就需要判断之前是否有青蛙发出了k的声音,如果有,那么pre–, 当前叫声 ++,那么这只青蛙可以继续开始,如果没有,那么需要一个青蛙来叫。
- 如果当前为‘r’,就需要判断之前是否有青蛙发出了‘c’的声音,如果有的话,就用这只青蛙,pre–,当前叫声++;如果没有,那么就不能叫,返回-1;
- 其他的判断和4是一样的。
- 最终每个青蛙是要叫出完整的croak,所以最终输出k的叫了几声,就能判断需要几只青蛙。
代码
class Solution {
public:
int minNumberOfFrogs(string croakOfFrogs) {
int n = croakOfFrogs.size();
char pre['s'];
string ini = "croakc";
for(int i = 1; i < ini.size(); i++){
pre[ini[i]] = ini[i-1];
}
int cnt['s'] = {0};
for(int i = 0; i < croakOfFrogs.length(); i++){
// cout<<pre[croakOfFrogs[i]]<<'\n';
if(cnt[pre[croakOfFrogs[i]]] !=0){
cnt[pre[croakOfFrogs[i]]]--;
}else if(croakOfFrogs[i] != 'c'){
return -1;
}
cnt[croakOfFrogs[i]]++;
}
if(cnt['c'] || cnt['r']||cnt['o']|| cnt['a']){
return -1;
}
return cnt['k'];
}
};
# 参考
https://leetcode.cn/problems/minimum-number-of-frogs-croaking/solutions/2257845/bie-xiang-tai-fu-za-mo-ni-ti-
ba-liao-pyt-9t87/