测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A29391. 最多删除两个字符

填空题 较难

题目描述

最多删除两个字符

题目描述

给定一个仅由小写英文字母组成的字符串,最多删两个字符后,能得到多少种不同的字符串?

时间限制:5000        内存限制:65536

输入

输入在一行中给出长度在区间 [3, 106] 内的仅由小写英文字母组成的字符串。

输出

在一行中输出最多删两个字符后所能得到的不同字符串的个数。

样例输入

ababcc

样例输出

15

提示

样例解释:

1、删除 0 个字符后得到 `ababcc`;

2、删除 1 个字符后得到 `babcc`, `aabcc`, `abbcc`, `abacc`, `ababc`;

3、删除 2 个字符后得到 `abcc`, `bbcc`, `bacc`, `babc`, `aacc`, `aabc`, `abbc`, `abac`, `abab`。

参考答案

#include <iostream> #include <string> #include <set> // 函数用于计算最多删除两个字符后能得到的不同字符串的数量 int countDistinctStrings(const std::string& s) { std::set<std::string> distinctStrings; int n = s.length(); // 不删除字符的情况 distinctStrings.insert(s); // 删除一个字符的情况 for (int i = 0; i < n; ++i) { std::string newStr = s.substr(0, i) + s.substr(i + 1); distinctStrings.insert(newStr); } // 删除两个字符的情况 for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { std::string newStr = s.substr(0, i) + s.substr(i + 1, j - i - 1) + s.substr(j + 1); distinctStrings.insert(newStr); } } return distinctStrings.size(); } int main() { std::string s; std::cin >> s; std::cout << countDistinctStrings(s) << std::endl; return 0; }
上一题 下一题