题解 | #牛群密码 - 有效回文# 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;
        }

        for (int i = 0, j = password.length() - 1, t = 1; i < j; i++, j--) {
            if (password.charAt(i) == password.charAt(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。

这道题考察的主要知识点包括:

  1. 使用集合:将字符放入集合以计算不同字符的数量,帮助判断是否满足条件。
  2. 字符串
  3. 双指针

以下是代码的解释:

  • 创建一个 HashSet 对象 set,用于存储不同的字符。
  • 使用循环遍历密码字符串中的每个字符,将字符添加到 set 中,从而计算不同字符的数量。
  • 如果 set 中不同字符的数量大于 k,则不满足条件,返回 false。
  • 创建两个指针 i 和 j,分别指向密码字符串的开头和结尾。
  • 使用循环,比较字符是否相同。如果字符相同,继续遍历下一个字符。
  • 如果字符不同,根据 t 的值来判断是否可以删除字符以构成回文字符串。
  • 如果 t 为 1,表示可以删除一个字符,根据情况删除字符,然后更新指针 i 或 j。
  • 如果 t 为 0,表示已经删除过一个字符,不再满足条件,返回 false。
  • 如果循环结束后,指针交叉或重合,说明密码满足条件,返回 true。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务