牛客 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