Java - 华为机试训练 - 密码验证合格程序(正则表达式判断)

来源:互联网 发布:算日子的软件 编辑:程序博客网 时间:2024/05/19 18:44

  • 时间限制:1秒空间限制:32768K
  • 本题知识点: 字符串 数组
  •  算法知识视频讲解

题目描述

密码要求:

 

 

 

1.长度超过8位

 

 

 

2.包括大小写字母.数字.其它符号,以上四种至少三种

 

 

 

3.不能有相同长度超2的子串重复

 

 

 

说明:长度超过2的子串



输入描述:

一组或多组长度超过2的子符串。每组占一行



输出描述:

如果符合要求输出:OK,否则输出NG


输入例子:
021Abc9000021Abc9Abc1021ABC9000021$bc9000

输出例子:
OKNGNGOK
思路:

合法字符串 :

1.长度>8。 

2.大写字母,小写字母,符号,数字,具有其中3种或者以上。

3.不能有长度为3或者3以上的子串相同。

输入字符串进行判断,是合法字符串输出OK,否则输出NG。


import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String s = sc.next();if (f(s)) {System.out.println("OK");} else {System.out.println("NG");}}}// 数字,大小写字母,符号static boolean f(String s) {int flag = 0;Pattern p1 = Pattern.compile(".*[a-z]+.*");//小写字母Pattern p2 = Pattern.compile(".*[0-9]+.*");//数字Pattern p3 = Pattern.compile(".*[^0-9a-zA-Z]+.*");//符号(除了字母和数字)Pattern p4 = Pattern.compile(".*[A-Z]+.*");//大写字母Matcher m1 = p1.matcher(s);Matcher m2 = p2.matcher(s);Matcher m3 = p3.matcher(s);Matcher m4 = p4.matcher(s);if (m1.matches()) {flag++;}if (m2.matches()) {flag++;}if (m3.matches()) {flag++;}if (m4.matches()) {flag++;}if (s.length() > 8 && flag >= 3 && f1(s)) {return true;}return false;}//判断是否有长度为3的字符子串相同static boolean f1(String s) {for (int i = 0; i < s.length()-3; i++) {String s1 = s.substring(i,i+3);String s2 = s.substring(i+3);if (s2.contains(s1)) {return false;}}return true;}}


0 0
原创粉丝点击