美团笔试密码匹配

不知道什么边界没有考虑到,只能AC91%

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            sc.nextLine();
            String[] str = new String[n];
            for (int i = 0; i < n; i ++) {
                 str[i] = sc.nextLine();
            }        
            for (int i = 0; i < n; i ++ ) {
                 System.out.println(match(str[i]));

            }                 
        }
    }
    public static String match(String str) {
          String res = null;
          if (str.length() < 8) {
              res = "NO";
          } else {
              String regex = "^[^0-9]\\w*";

              if (!str.matches("[0-9A-Za-z]+")) {
                  res = "NO";
              } else if (!str.matches(regex)) {
                  res = "NO";
              } else if (str.matches("\\w*[0-9]+\\w*") && (str.matches("\\w*[a-z]+\\w*") || str.matches("\\w*[A-Z]+\\w*"))){
                  res = "YES";

              } else {
                  res = "NO";
              }
          }
          return res;
    }        
}
#美团#
全部评论
我也是91%
点赞 回复 分享
发布于 2017-09-14 21:26
我也是,不过我发现我的正则还没有校验非数字字母开头的情况,应该是这样子,不过发现的时候已经没时间了。
点赞 回复 分享
发布于 2017-09-14 21:30
var n = 0; if((line = read_line()) != null){ n = parseInt(line); while(n > 0){ line = read_line(); if(line.length < 8){ print('NO'); }else{ var reg = /(^[a-z]+[0-9|A-Z]+\w+)|(^[A-Z]+[a-z|0-9]+\w+)/; if(reg.test(line)){ print('YES'); }else{ print('NO'); } } n--; } }
点赞 回复 分享
发布于 2017-09-14 21:32
我是js  我就这样写的 正则写都是最简单的那种 if(小于8位){     if(首位是数字) {         if (有非法字符) {            统计一下字符种类             if(种类大于等于2) {return true}            return  false         }         return  false     }     return  false }
点赞 回复 分享
发布于 2017-09-14 21:33

相关推荐

拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务