题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

import java.util.*;
import java.util.regex.Pattern;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static boolean isMatch(String str){ //满足正则返回false
        int index = 0;
        Pattern p1 = Pattern.compile("[^a-zA-Z0-9]");
        if(p1.matcher(str).find()){
            index++;
        }
        Pattern p2 = Pattern.compile("[a-z]");
        if(p2.matcher(str).find()){
            index++;
        }
        Pattern p3 = Pattern.compile("[0-9]");
        if(p3.matcher(str).find()){
            index++;
        }
        Pattern p4 = Pattern.compile("[A-Z]");
        if(p4.matcher(str).find()){
            index++;
        }

        if(index >= 3){
            return false;
        }else{
            return true;
        }
    }

    public static boolean isSame(String str,int l,int r){
        if(r > str.length()){
            return false;
        }
        if(str.substring(r).contains(str.substring(l,r))) {
            return true;
        }else{
            return isSame(str,l+1,r+1);
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            if(str.length() <= 8){
                System.out.println("NG");
                continue;
            }
            if(isMatch(str)){
                System.out.println("NG");
                continue;
            }
            if(isSame(str,0,3)){
                System.out.println("NG");
                continue;
            }
            System.out.println("OK");
        }
    }
}

思路

总体考察字符串操作,要求2:用正则既可,要求3:用String的.substring()判断有无重复既可

总结

1.

        Pattern p1 = Pattern.compile("[^a-zA-Z0-9]");
        if(p1.matcher(str).find()){
            ……;
        }

Pattern p1 = Pattern.compile("[^a-zA-Z0-9]");:这一行代码创建了一个正则表达式模式对象 p1,用于匹配任何字符。

p1.matcher(str):这一部分使用上面创建的正则表达式模式对象 p1 来创建一个匹配器对象,该匹配器用于在字符串 str 中进行匹配操作。

find():这是一个 Matcher 类的方法,用于在输入的字符串中查找与模式匹配的子序列。如果找到匹配项,则返回 true;否则返回 false。

总之,这段代码意思是:把正则表达式用Pattern.compile()存着,然后把正则放到字符串str中找,找到就true,一点都找不到就返回false。

2.

    public static boolean isSame(String str,int l,int r){
		……
        if(str.substring(r).contains(str.substring(l,r))) {
            return true;
        }else{
            return isSame(str,l+1,r+1);
        }
    }

这段代码中思维挺巧(不愧是大佬的思维),用递归来找有无重复

李咸鱼刷题小结 文章被收录于专栏

总结一下我的刷题过程、错误以及学到的知识

全部评论

相关推荐

WhiteAlbum...:学院本2中大厂垂直实习➕acm比赛 秋招0面试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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