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

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