牛客 HJ20 密码验证合格程序 (Java 数组 哈希表)


牛客 HJ20 密码验证合格程序 (Java 数组 哈希表)

 

 

思路:
1.验证输入的长度,<8直接输出NG
2.验证输入串的每个字符,满足ASCII码四个段(大小写字母,数字,其他字符)其中三个以上。(这步可用数组实现,fix[],遍历数组fix,元素相加看看有没有>3)
3.设窗口为3,对输入字符串,移动位置,并且3个3个放入哈希表,如果发现有重复的,直接输出NG

 

 

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.*;
 5 
 6 public class Main {
 7     public static void main(String[] args) throws IOException {
 8         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 9         String input = null;
10         String str = null;//暂存子串
11         int out = 0;//不满足条件就出局
12         int len = 0;//当前输入字符串长度
13         //StringBuffer sb = new StringBuffer(3);//定义一个长度为3的字符缓冲区
14         int sum = 0;//种类总和
15         Map<String,Integer> ages = new HashMap<String,Integer>();//用于验证条件3是否有重复子串
16         int start=0,end=0;//截取字符串字串时的起点终点
17         
18         while((input = reader.readLine())!=null){//一行行处理输入字符串
19             ages.clear();//每次输入都清空哈希表
20             //input.substring(0,3);
21             //System.out.println(input);
22             //System.out.println(input.substring(0,3));
23             
24             len = input.length();
25             if(len<8){//条件1
26                 System.out.println("NG");
27                 continue;
28             }
29             
30             int[] type = new int[len+1];//用于计算所含字符的种类
31             for(int i = 0;i<len;i++){
32                 int number = Integer.valueOf(input.charAt(i));//取出字符ASCII码值
33                 //System.out.println(number);
34                 
35                 if(number>=48&&number<=57){//计算包含字符种类//数字
36                     type[0] = 1;
37                 }else if(number>=65&&number<=90){//大写字母
38                     type[1] = 1;
39                 }else if(number>=90&&number<=122){//小写字母
40                     type[2] = 1;
41                 }else{//其他字符
42                     type[3] = 1;
43                 }
44             }
45             for(int j =0;j<4;j++){
46                 sum = sum + type[j];
47             }
48             if(sum<3){//条件2
49                 System.out.println("NG");
50                 continue;
51             }
52             
53             
54             for(end=3;end<input.length();start++,end++){//条件3
55                 str = "";
56                 str = input.substring(start,end);//将截取子串放入
57                 //System.out.println("str show :"+str);
58                 if(ages.containsKey(str)){
59                     out = 1;
60                     break;
61                 }else{
62                     ages.put(str,start);
63                     //System.out.println("ages put :"+str);
64                 }
65                 
66             }
67             if(out == 1){//是否出局
68                 System.out.println("NG");
69                 continue;
70             }
71             System.out.println("OK");
72             
73             }//while
74 
75     }
76 }

 

 
谷歌:
1.StringBuff
Java StringBuffer类详解 (biancheng.net)
可以追加append、截取substring、删除delete、删除某字符deleteCharAt、反转reverse、替换setCharAt
 
截取字符串substring
(14条消息) Java中StringBuffer的截取功能(substring)!_不会下雨的云的博客-CSDN博客_stringbuffer.substring

 1 public class StringBufferDemo {
 2     public static void main(String[] args) {
 3         //创建字符串缓冲区对象
 4         StringBuffer sb = new StringBuffer();
 5         sb.append("hello").append("world").append("java");
 6         System.out.println("sb:"+sb);
 7         
 8         //截取功能:public String substring(int start)
 9         String s = sb.substring(5);
10         System.out.println("s:"+s);
11         System.out.println("sb:"+sb);
12         
13         //public String substring(int start,int end)
14         String ss = sb.substring(5, 10);
15         System.out.println("ss:"+ss);
16         System.out.println("sb:"+sb);
17     }
18 }

 

 
2.switch case
case返回的是布尔类型

switch (表达式)
{
    case 常量表达式1:    语句1
    case 常量表达式2:    语句2
       ┇
    case 常量表达式n:    语句n
    default:        语句n+1
}

 

3.break、continue、goto
(14条消息) c语言中,while(1)语句使用break语句跳出循环_Surferqing_的博客-CSDN博客_break跳出while
假设是

while(){

    for(){
        continue;
        //break;
        //return;
    }
    sout();
}

 
java现在没有goto语句了,只是保存了这个关键词
旧goto: Java中goto标签的使用 – 大凌轩 – 博客园 (cnblogs.com)
 
break:跳出本次while循环,不再执行sout
continue:跳出本次for,会执行sout
return:结束本函数并返回

 

 
 
4.获取ASCII
 
(14条消息) java中获取字符的ASCII值_大橘!的博客-CSDN博客_java 获取ascii码
 
牛客 HJ20 密码验证合格程序 (Java 数组 哈希表)
 
 

 

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/278072.html

(0)
上一篇 2022年7月31日
下一篇 2022年7月31日

相关推荐

发表回复

登录后才能评论