题目考察的知识点:字符串的遍历
题目解答方法的文字分析:将字符串入到unordered_map中,统计字母出现的次数,次数为1次可以删除,并且只能删除一次。
本题解析所用的编程语言:c++
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param password string字符串 * @param k int整型 * @return bool布尔型 */ bool isValidPalindrome(string password, int k) { // write code here unordered_map<char, int> umap; for (int i = 0; i < password.size(); ++i) { auto it = umap.find(password[i]); if (it != umap.end()) { it->second++; } else { umap.insert(pair(password[i], 1)); } } if (umap.size() > k) return false; int i = 0, j = password.size() - 1; int n = 1; //只能删一次 while (i < j) { if (password[i] == password[j]) { ++i; --j; } else if (n) { auto it1 = umap.find(password[i]); auto it2 = umap.find(password[j]); if (it1->second == 1) ++i; else if (it2->second == 1) --j; --n; } else return false; } return true; } };