《重启11》
一、验证密码复杂性
给你一个字符串,这个字符串必须满足以下五个条件
要有数字
要有大写字母
要有小写字母
要有特殊字符
子字符串长度不小于8
代码
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.next();
if (cheak(str)) {
System.out.println("Ok");
break;
} else {
System.out.println("Irregular password");
}
}
sc.close();
}
public static boolean cheak(String str) {
if (str.length() < 8) {
return false;
}
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = true;
boolean flag4 = true;
for (char i : str.toCharArray()) {
if (i >= '0' && i <= '9') {
flag1 = false;
} else if (i >= 'a' && i <= 'z') {
flag2 = false;
} else if (i >= 'A' && i <= 'Z') {
flag3 = false;
/**
* i >= 0 && i <= 127 (验证是否存在特殊字符)
**/
} else if (i >= 0 && i <= 127) {
flag4 = false;
}
if (!flag1 && !flag2 && !flag3 && !flag4) {
return true;
}
}
return false;
}
}
二、求一个数组中元素出现次数超过数组长度的元素
ps:这道题是有n种方法,但最简单粗暴的方法是怎样呢?
首先你能不能从这道题反向角度去获取一些信息,我能不能理解到他的个数是别的所有人加起来的都多而且他只能有一个。
我们把每个元素当作一个士兵,遍历所有士兵下去拼死,遇到相同的士兵数量加一,遇到不同的士兵数量减一,如果你的士兵数量现在为0,还遇到不同的士兵,然后那个不同的士兵把数量为0的士兵砍掉,换成他,循环下去。得到剩下的那个就是最勇敢的士兵!!!!也就是元素出现次数超过数组长度的元素。
输入: 16
3 2 1 3 3 3 2 3 2 3 4 3 4 4 3 3
ps:第一排数组长度
第二排数组
输出: 3
具体代码
import java.util.Scanner;
public class Soldier {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int i=in.nextInt();
while (in.hasNextInt()){
int[] temp=new int[i];
for (int n=0;n<i;n++){
temp[n]=in.nextInt();
}
/**
* 拼殺!!!!!!
*/
int soldier=0; //士兵
int count=0; //数量
for (int m=0;m<i;m++){
if(m==0){
soldier=temp[m];
count++;
}else if(soldier==temp[m]){
count++;
}else if(soldier!=temp[m]&&count==0){
soldier=temp[m];
count++;
}else if(soldier!=temp[m]&&count!=0){
count--;
}
}
System.out.println(soldier);
break;
}
in.close();
}
}