Cuber QQ 会给你一个长度为 n 的字符串,这个学符里仅有两个字符: A 和 P正如 PPAP 一样,P 和 P 可以合并在一起,A 和 P 也能合并在一起,因此你可以一直做如下操作: 1. 删除一个子串 PP ; 2.删除一个子串 AP 子串的通俗解释是,字符串中的连续字符。 删除之后的字符串会重新拼接在一起,并且可以继续删除。 例如: AAPAPPA AAPPAAAA 。 当然还有一种更优的删除方法: AAPAPPA AAPPA APAA。 现在给定一个字符串,请问每个字符串经过若干次操作之后,最短的字符串的长度是多少。 输入格式 输入只有一行,包含一个长度为 n 的、仅包含 A 和 P的字符串输出格式 输出一个数字,表示经过删除后最短的字符串的长度。 样例 string.in string.out AAPAPPAc++
时间: 2024-04-16 18:28:40 浏览: 182
首先,我们可以使用一个变量 `count` 来记录当前字符串中连续出现的 "P" 的个数。然后遍历字符串,如果遇到 "A",则将 `count` 置为 0,如果遇到 "P",则 `count` 加 1。在遍历过程中,我们还需要记录最小长度 `min_length`,初始值为字符串的长度。
然后,我们再次遍历字符串,如果遇到 "A",就将当前长度 `length` 更新为 `count`,然后将 `count` 置为 0。在每次更新 `length` 之后,将 `min_length` 更新为 `min(min_length, length)`。
最后,输出 `min_length` 即为经过删除后最短的字符串的长度。
以下是 C++ 的实现代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int count = 0;
int min_length = s.length();
for (char c : s) {
if (c == 'A') {
count = 0;
} else if (c == 'P') {
count++;
}
int length = count;
count = 0;
min_length = min(min_length, length);
}
cout << min_length << endl;
return 0;
}
```
请注意,在输入时字符串末尾的 "c++" 是无关的字符,不需要读取。
阅读全文