本文主要是介绍刷题——数大雁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由
几只大雁发出。具体的:
- 大雁发出的完整叫声为"quack",因为有多只大雁同一时间嘎嘎作响,所以字符串中可能
会混合多个 “quack”。 - 大雁会依次完整发出 “quack”,即字符串中‘q’, ’u’, ’a’, ’c’, ’k’ 这 5个
字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。 - 如果字符串不是由‘q’, ’u’, ’a’, ’c’, ’k’字符组合而成,或者没有找到一
只大雁,请返回 -1。
输入描述:
一个字符串,包含大雁quack的叫声。1 <= 字符串长度 <= 10000
字符串中的字符只有’q’, ‘u’, ‘a’, ‘c’, ‘k’
输出描述:
大雁的数量
#include <iostream>
#include <string>
#include <algorithm>bool is_str(std::string str)
{int times = 0, times1 = 0, times2 = 0, times3 = 0, times4 = 0, times5 = 0;for (int i = 0; i < str.size(); i++){if (str.at(i) == 'q' || str.at(i) == 'u' || str.at(i) == 'a' || str.at(i) == 'c' || str.at(i) == 'k'){times++;}if (str.at(i) == 'q'){times1++;}else if (str.at(i) == 'u'){times2++;}else if (str.at(i) == 'a'){times3++;}else if (str.at(i) == 'c'){times4++;}else if (str.at(i) == 'k'){times5++;}}if(times != str.size() || times1==0 || times2 == 0 || times3 == 0 || times4 == 0 || times5 == 0 || str.size() < 5){return false;}else{return true;}
}int number(std::string str)
{int times = 0;for (int i = 0; i < str.size() - 5; i++){if (str.at(i) == 'q' && str.at(i+1) == 'u' && str.at(i+2) == 'a' && str.at(i+3) == 'c' && str.at(i+4) == 'k'){times++;}}std::cout << "N2:" << times+1 << std::endl;return times;
}int count(std::string str)
{int times1=0,times2 =0,times3=0,times4=0,times5=0;for(int i=0;i<str.size();i++){if (str.at(i) == 'q'){times1++;}else if (str.at(i) == 'u'){times2++;}else if (str.at(i) == 'a'){times3++;}else if (str.at(i) == 'c'){times4++;}else if (str.at(i) == 'k'){times5++;}}std::cout << "N1:" << std::max(std::max(std::max(std::max(times1, times2), times3), times4), times5) << std::endl;return std::max(std::max(std::max(std::max(times1, times2), times3), times4),times5);
}int dayan_num(std::string str)
{bool flag = is_str(str);if (flag == true){std::cout << "给出的字符串是有效组合" << std::endl;return count(str) - number(str);}else{std::cout << "给出的字符串不是有效组合" << std::endl;return -1;}
}int main()
{std::string str1 = "quackquack";std::string str2 = "quqackuack";std::string str3 = "quackquuok";int N = dayan_num(str1);std::cout << "N:" << N << std::endl;return 0;
}
这篇关于刷题——数大雁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!