L.B.

密码验证合格程序

http://www.nowcoder.com/questionTerminal/184edec193864f0985ad2684fbc86841

import javax.security.sasl.SaslClient;
import javax.swing.text.html.HTMLDocument;
import java.sql.SQLOutput;
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Set<Character> set1 = new HashSet<>();
        set1.add('$');
        set1.add('%');
        set1.add('#');
        set1.add('@');
        set1.add('-');
        set1.add('~');
        set1.add('!');
        set1.add('^');
        set1.add('&');
        set1.add('*');
        set1.add('(');
        set1.add(')');
        set1.add('+');
        //有人直接把set1去掉了,我认为这才符合一般情况,密码一般允许‘(’吧
        while (scanner.hasNext()) {
            int sign = 0;
            String str = scanner.nextLine();
            if(str.length() <= 8){
                System.out.println("NG");
                //sign = 1;
                continue;
            }
            char[] cha = str.toCharArray();
            int numsign = 0;
            int uppersign = 0;
            int lowersign = 0;
            int othersign = 0;
            for(int i = 0; i < str.length(); i++){
                if (numsign == 0 &&(cha[i] >= '0' && cha[i] <= '9')){
                    numsign = 1;
                }
                if (uppersign == 0 && (cha[i] >= 'a' && cha[i] <= 'z' ) ){
                    uppersign = 1;
                }
                if (lowersign == 0 && (cha[i] >= 'A' && cha[i] <= 'Z')){
                    lowersign = 1;
                }
                if(othersign == 0 && set1.contains(cha[i])){
                    othersign = 1;
                }
                if(uppersign + lowersign + numsign + othersign == 3){
                        break;
                }
            }
            if(uppersign + lowersign + numsign + othersign < 3){
                System.out.println("NG");
                //sign = 1;
                continue;
            }
            Set<String> set = new HashSet<>();
            for (int j = 0; j < str.length()-2; j++){
                StringBuilder sb = new StringBuilder();
                String str1 = sb.append(cha[j]).append(cha[j+1]).append(cha[j+2]).toString();
                if(set.contains(str1)){
                    System.out.println("NG");
                    sign = 1;
                    break;
                }else{
                    set.add(str1);
                }
            }
            if(sign == 0){
                System.out.println("OK");
            }
        }
    }
}



//有人直接把set1去掉了,直接一个else搞定,
我认为加上set1这才符合一般情况,密码一般不允许‘(’吧

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            int sign = 0;
            String str = scanner.nextLine();
            if(str.length() <= 8){
                System.out.println("NG");
                //sign = 1;
                continue;
            }
            char[] cha = str.toCharArray();
            int numsign = 0;
            int uppersign = 0;
            int lowersign = 0;
            int othersign = 0;
            for(int i = 0; i < str.length(); i++){
                if (numsign == 0 &&(cha[i] >= '0' && cha[i] <= '9')){
                    numsign = 1;
                }
                else if (uppersign == 0 && (cha[i] >= 'a' && cha[i] <= 'z' ) ){
                    uppersign = 1;
                }
                else if (lowersign == 0 && (cha[i] >= 'A' && cha[i] <= 'Z')){
                    lowersign = 1;
                }
                else {
                    othersign = 1;
                }
                if(uppersign + lowersign + numsign + othersign == 3){
                        break;
                }
            }
            if(uppersign + lowersign + numsign + othersign < 3){
                System.out.println("NG");
                //sign = 1;
                continue;
            }
            Set<String> set = new HashSet<>();
            for (int j = 0; j < str.length()-2; j++){
                StringBuilder sb = new StringBuilder();
                String str1 = sb.append(cha[j]).append(cha[j+1]).append(cha[j+2]).toString();
                if(set.contains(str1)){
                    System.out.println("NG");
                    sign = 1;
                    break;
                }else{
                    set.add(str1);
                }
            }
            if(sign == 0){
                System.out.println("OK");
            }
        }
    }
}
全部评论
个人认为31行和要>=3
点赞 回复
分享
发布于 2019-11-19 11:36
第二个方法判断4种字符不对,有2个数字或者大写子母或小写子母,会跳过前3个if,直接让othersign也为1.
点赞 回复
分享
发布于 2020-05-06 10:49
联想
校招火热招聘中
官网直投

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务