编程语言
首页 > 编程语言> > 牛客 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码      

 

标签:Java,String,java,System,substring,牛客,哈希,sb,out
来源: https://www.cnblogs.com/JolyneSpace/p/16537844.html