牛客网-华为机试练习题 20
题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出
OK
NG
NG
OK
思路:
1,判断长度
2,统计每种字符的数量,三种数量都大于1,就继续进行判断,否则返回false
3,字符串从左向右进行判断,字串1从i切到i+3,字串2从i+3切到最后,如果字串2包含字串1,返回false,在判断完后,就返回true
解决代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine())
{
String str = sc.nextLine();
boolean flag = Solution(str);
if(flag){
System.out.println("OK");
}else{
System.out.println("NG");
}
}
}
public static boolean Solution(String str){
if(str.length()<=8)
{
return false;
}
int num = 0;
int chars = 0;
int other =0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='0' &&str.charAt(i)<='9'){
num = num+1;
}
if(str.charAt(i)>='a' &&str.charAt(i)<='z'){
chars+=1;
}
if(str.charAt(i)>='A' &&str.charAt(i)<='Z'){
chars+=1;
}else{
other+=1;
}
}
if(num==0||chars==0||other==0 ){
return false;
}else {
for(int i=0;i<str.length()-3;i++){
String str1 = str.substring(i,i+3);
String str2 = str.substring(i+3);
if(str2.contains(str1)){
return false;
}
}
return true;
}
}
}
总结
-
判断相同长度超过2的字串重复
for(int i=0;i<str.length()-3;i++){ String str1 = str.substring(i,i+3); String str2 = str.substring(i+3); if(str2.contains(str1)){ return false; } }