题目考察的知识点:字符串的遍历
题目解答方法的文字分析:将字符串入到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;
}
};

京公网安备 11010502036488号