ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-07-31 19:00:08  阅读:193  来源: 互联网

标签:Java String java System substring 牛客 哈希 sb out


 

 

思路: 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有