1、汇总概要
本题较简单,主要考虑时间复杂度问题,解题用到了哈希表。
2、题目
A password is considered strong if below conditions are all met:
- It has at least 6 characters and at most 20 characters.
- It must contain at least one lowercase letter, at least one uppercase letter, and at least one digit.
- It must NOT contain three repeating characters in a row ("...aaa..." is weak, but "...aa...a..." is strong, assuming other conditions are met).
Write a function strongPasswordChecker(s), that takes a string s as input, and return the MINIMUM change required to make s a strong password. If s is already strong, return 0.
Insertion, deletion or replace of any one character are all considered as one change.
3、审题
给定一串密码,找出其最少需更改几处,以满足密码规则。
4、解题思路
本题的密码规则分别是密码串长度、含小写、大写、数字、不能有连续重复三个的字符,共5个规则。
为一次遍历密码串后,得到结果,即时间复杂度为O(N),用哈希表记录满足规则的状态,以减少判断次数。
算法不复杂,直接上代码。
5、代码示例 - Java
import java.util.HashMap;
public class StrongPasswordChecker {
public int PWDCheck(String pwd){
String res = "";
HashMap<String,Integer> hm = new HashMap<String,Integer>();
int metNum = 0;
int maxRepNum = 1;
int len=pwd.length();
if(len>=6 && len<=20){
hm.put("isLength", 1);
metNum++;
}else{
hm.put("isLength", 0);
}
for(int i=0;i<len;i++){
char c = pwd.charAt(i);
if(Character.isLowerCase(c)){
if(!hm.containsKey("isLowercase")){
hm.put("isLowercase", 1);
metNum++;
}
}else if(Character.isUpperCase(c)){
if(!hm.containsKey("isUppercase")){
hm.put("isUppercase", 1);
metNum++;
}
}else if(Character.isDigit(c)){
if(!hm.containsKey("isDigit")){
hm.put("isDigit", 1);
metNum++;
}
}
if(!hm.containsKey("isRepeat3")){
if(i<len-1 && pwd.charAt(i) == pwd.charAt(i+1)){
maxRepNum++;
if(maxRepNum>=3){
hm.put("isRepeat3", 1);
}
}else{
maxRepNum = 1;
}
}
}
if(!hm.containsKey("isRepeat3")){
metNum++;
}
int minimum = 5 - metNum; //get Minimum change
return minimum;
}
public static void main(String[] args){
String pwd = "aa11bcBBB";
StrongPasswordChecker spwc = new StrongPasswordChecker();
int minimum = spwc.PWDCheck(pwd);
System.out.println("minimum: "+minimum);
}
}
---------------------------------------------------------------------------------------------------
本文链接:http://blog.youkuaiyun.com/karen0310/article/details/xx
请尊重作者的劳动成果,转载请注明出处!
---------------------------------------------------------------------------------------------------