Java题解 | #牛群密码 - 有效回文#
牛群密码 - 有效回文
https://www.nowcoder.com/practice/98fad63b47544d5ebf4042fc53b54b3d
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param password string字符串
* @param k int整型
* @return bool布尔型
*/
public boolean isValidPalindrome (String password, int k) {
// write code here
HashSet<Character> set = new HashSet<>();
for (char c : password.toCharArray()) {
set.add(c);
}
if (set.size() > k) {
return false;
}
int i = 0, j = password.length() - 1, t = 1;
while (i < j) {
if (password.charAt(i) == password.charAt(j)) {
i++;
j--;
continue;
}
if (t == 1) {
t = 0;
if (password.charAt(i) == password.charAt(j - 1)) {
j--;
} else if (password.charAt(i + 1) == password.charAt(j)) {
i++;
} else {
return false;
}
} else {
return false;
}
}
return true;
}
}
Java代码
该题考察的主要知识点包括:
- 字符串处理:使用字符串的方法来处理密码中的字符。
- 数据结构:使用集合(HashSet)来存储不同的字符,以及在处理过程中判断字符是否出现过。
- 循环和条件判断:使用循环和条件判断来检查密码是否满足题目的条件。
代码解释:
- 使用 HashSet 存储密码中的不同字符,以便检查字符种类的数量是否超过 k。
- 首先判断集合中的字符种类数是否超过了 k,如果是,直接返回 false。
- 使用双指针 i 和 j 来比较密码的字符,t 作为标志位,记录是否已经删除了一个字符。
- 在循环中,如果 password.charAt(i) == password.charAt(j),表示当前字符是回文的一部分,移动指针并继续比较。
- 如果当前字符不相等,首先判断是否已经删除过字符,如果是,则无法满足条件,返回 false。
- 如果没有删除过字符,判断能否通过删除一个字符构成回文。具体判断条件是检查删除 password.charAt(j) 后是否能够构成回文,或者删除 password.charAt(i) 后是否能够构成回文。如果都不满足,则返回 false。
- 如果循环结束后没有返回 false,则表示密码满足条件,返回 true。
腾讯成长空间 6062人发布