一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由
几只大雁发出。具体的:
1.
大雁发出的完整叫声为
"quack"
,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能
会混合多个
"quack"
。
2.
大雁会依次完整发出
"quack"
,即字符串中‘
q
’
,
’
u
’
,
’
a
’
,
’
c
’
,
’
k
’ 这
5
个
字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。
3.
如果字符串不是由‘
q
’
,
’
u
’
,
’
a
’
,
’
c
’
,
’
k
’字符组合而成,或者没有找到一
只大雁,请返回
-1
。
输入描述:
一个字符串,包含大雁
quack
的叫声。
1 <=
字符串长度
<= 10000
字符串中的字符只有
'q', 'u', 'a', 'c', 'k'
输出描述:
大雁的数量
public class Quack {
public static void main(String[] args) {
//获取字符串信息
Scanner in= new Scanner(System.in);
String quackStr=in.nextLine();
Character[] quack={'q','u','a','c','k'};
List<Character> quackList=new ArrayList<>(Arrays.asList(quack));
int min = getMin(quackStr, quackList);
System.out.println(min);
}
public static int getMin(String quackStr,List<Character> quackList){
int qCount=0;
int index=0;
int len=quackList.size();
List<Integer> qList=new ArrayList<>();
for(int i=0;i<quackStr.length();i++){
//排除非大雁情况
if(!quackList.contains(quackStr.charAt(i))){
return -1;
}
//记录q的数量
if (quackStr.charAt(i)=='q'){
qCount++;
}
//记录一次包含quack完整顺序的q的个数,然后再进行查找
if(quackStr.charAt(i)==quackList.get(index)){
if(index==len-1){
qList.add(qCount);
index=0;
qCount=0;
continue;
}
index++;
}
}
if (qList.size()==0){
return -1;
}
int u=0;
int a=0;
int c=0;
int k=0;
for (int j=0;j<quackStr.length();j++){
switch (quackStr.charAt(j)){
case 'u':
u++;
break;
case 'a':
a++;
break;
case 'c':
c++;
break;
case 'k':
k++;
break;
}
}
//获取最小的值
int min=Math.min(Math.min(u,a),Math.min(c,k));
for (Integer integer : qList) {
if (integer <= min) {
return integer;
}
}
return min;
}
}
2150

被折叠的 条评论
为什么被折叠?



