题目描述:
一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由
几只大雁发出。具体的:
- 大雁发出的完整叫声为"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;
}