可爱的红红是一个特殊的存在,卖萌切题无所不能,酷爱发QAQ。
男神队友决定整理一下聊天记录看看,红红给队友发了多少QAQ(可以是分散的QAQ)。
例如QAQJLZBBQ,输出2,聪明的你,能帮男神队友解决问题吗?
题目描述
可爱的红红是一个特殊的存在,卖萌切题无所不能,酷爱发QAQ。
男神队友决定整理一下聊天记录看看,红红给队友发了多少QAQ(可以是分散的QAQ)。
例如QAQJLZBBQ,输出2,聪明的你,能帮男神队友解决问题吗?
输入
输入一行长度为n的字符串(1<=n<=100000),并且字符串中字符全为大写字母。
输出
输出一个整数表示给出的字符串里子序列中"QAQ"的个数。子序列就是一些原字符串中不要求连续的字符组成的新字符串。
样例输入
QAQJLZBBQ
样例输出
2
提示
样例解释:第1 2 3个字符形成"QAQ" 第1 2 9个字符形成"QAQ";
家庭作业要自己做才能小白白变成大牛。
已经写出来了一个,答案也正确,但是提交错误。想问问你们有没有别的做法,。。。
随便想的,你试一试可不可以,嵌套三个循环试一试,第一层循环找出以Q开头的,并且记录下Q的位置,第二层循环从上一层Q的位置开始循环,找出A的位置,第三层循环在从第二层中找到的A的位置,找Q的位置。
----------------------------------------------------------
上面这种思路是一般思路,其实这个过程中有一个规律:
就是QAQ的数量恰好是,每个A的左右Q的数量的乘积之和,比如:QAQJLAZABQ来说,一共有三个A,第一个A的左边Q的数量为1,右边的Q的数量为2,所以第一个A拥有的QAQ的数量就是2;第二个A,左边Q的数量的为2,右边Q的数量为1,所以第二个A的QAQ的数量就是2,第三个类似。因此得出QAQ的数量为2+2+2,答案就是6.只需要按照这个思路,把上面的程序实现一下就OK了:
1:得出字符串中所有Q的位置,保存到数组中
2:得出所有A的位置,保存到数组中。
3:循环第二个数组,得到A的位置,比对当前A的左右Q的数量的乘积,再将乘积保留下来。
4:最后得出答案。
随便想的,你试一试可不可以,嵌套三个循环试一试,第一层循环找出以Q开头的,并且记录下Q的位置,第二层循环从上一层Q的位置开始循环,找出A的位置,第三层循环在从第二层中找到的A的位置,找Q的位置。
----------------------------------------------------------
上面这种思路是一般思路,其实这个过程中有一个规律:
就是QAQ的数量恰好是,每个A的左右Q的数量的乘积之和,比如:QAQJLAZABQ来说,一共有三个A,第一个A的左边Q的数量为1,右边的Q的数量为2,所以第一个A拥有的QAQ的数量就是2;第二个A,左边Q的数量的为2,右边Q的数量为1,所以第二个A的QAQ的数量就是2,第三个类似。因此得出QAQ的数量为2+2+2,答案就是6.只需要按照这个思路,把上面的程序实现一下就OK了:
1:得出字符串中所有Q的位置,保存到数组中
2:得出所有A的位置,保存到数组中。
3:循环第二个数组,得到A的位置,比对当前A的左右Q的数量的乘积,再将乘积保留下来。
4:最后得出答案。
西电的oj题目,同样遇到问题,不晓得到底哪里错了,郁闷了一晚上了