import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param password string字符串
* @param k int整型
* @return bool布尔型
*/
public boolean isValidPalindrome (String password, int k) {
// 先利用hashSet进行去重处理
HashSet<Character> hashSet = new HashSet<>();
for (int i = 0; i < password.length(); i++) {
char c = password.charAt(i);
hashSet.add(c);
}
// 如果单个字符的数量比k大,肯定不是,返回false
if (hashSet.size() > k) {
return false;
}
int low = 0, high = password.length() - 1;
// 类似双指针,进行回文判断
while (low < high) {
// 如果密码正好是回文,比如abcba,那么一直走if语句,然后跳出
if (password.charAt(low) == password.charAt(high)) {
low++;
high--;
} else {
// else是用来判断删除一个字符,要么去掉前面,要么去掉后面,只要有一个满足回文即返回true
return vaild(password, low, high - 1) || vaild(password, low + 1, high);
}
}
return true;
}
/**
* low-high区间回文判断
* @param s
* @param low
* @param high
* @return
*/
public boolean vaild(String s, int low, int high) {
for (int i = low, j = high; i < j; i++, --j) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
}
本题知识点分析:
1.字符串回文判断
2.双指针
3.哈希表去重
4.数学模拟
本题解题思路分析:
1.先利用hashSet进行去重处理
2.如果单个字符的数量比k大,肯定不是,返回false
3.如果密码正好是回文,比如abcba,那么一直走if语句,然后跳出
4.else是用来判断删除一个字符,要么去掉前面,要么去掉后面,只要有一个满足回文即返回true

京公网安备 11010502036488号