Bài toán : Strong Password
Level: Easy
Tuần trước quên chưa đăng bài nên tuần này tôi sẽ đăng bù 2 thêm bài toán trong tuần này :D.
Tóm tắt bài toán : Đề bài yêu cầu chúng ta xác nhận xem chuỗi ký tự user nhập vào có phải là Strong Password hay không ? Nếu không thì phải thêm ít nhất (minumum) bao nhiêu kí tự để nó thành strong password ?
Với điều kiện :
- Its length is at least 6
- It contains at least one digit.
- It contains at least one lowercase English character.
- It contains at least one uppercase English character.
- It contains at least one special character. The special characters are:
!@#$%^&*()-+
Solution : Vậy theo yêu cầu bài toán để password là Strong Password thì nó phải thỏa mãn 5 điều kiện trên. Việc của chúng ta là check xem điều kiện có thỏa mãn hay không, bao nhiêu điều kiện không thỏa mãn và thêm kí tự nào và số lượng để thỏa mãn. Nếu bạn thấy bài này dễ quá không cần đọc solution thì cũng ok thôi vì nó dễ thật. Nhưng nếu ta để biết thêm 1 chút về cơ chế check strong password khi chúng ta đăng ký vào một website nào đó như facebook, google account,.. thì ta sẽ thấy khá hay. Bây giờ tôi sẽ đi luôn vào code để giải thích cho dễ.
Code tham khảo :
Link pastebin có hightlight syntax : https://pastebin.com/8JgB2Bvb
- static int minimumNumber(int n, String password) {
- // Return the minimum number of characters to make the password strong
- char[] pw = password.toCharArray();
- int specialCharacters =0;
- int numbers =0;
- int lowerCase =0;
- int upperCase =0;
- String special_characters = “!@#$%^&*()-+”;
- for(int i=0;i<n;i++){
- if((int)pw[i]>=48 && (int)pw[i]<=57)
- numbers++;//Đếm số number
- else if((int)pw[i]>=65 && (int)pw[i]<=90)
- upperCase++;//đếm chữ in hoa
- else if((int)pw[i]>=97 && (int)pw[i]<=122)
- lowerCase++;// đếm chữ thường
- else if(special_characters.contains(“”+pw[i]))
- specialCharacters++;// dùng contains kiểm tra kí tự đặc biệt rồi đếm
- if(numbers>=1 && upperCase >=1 && lowerCase>=1 && pw.length>=6 && specialCharacters>=1){
- return 0;//nếu thỏa mãn điều kiện bài toán thì return luôn
- }
- }
- if(n >=6){
- int count =0;
- if(numbers==0)
- count++;
- if(upperCase==0)
- count++;
- if(lowerCase==0)
- count++;
- if(specialCharacters==0)
- count++;
- return count;
- }else{//nếu độ dài ban đầu nhỏ hơn 6 thì cần kiểm tra 2 trường hợp
- int count =0;
- if(numbers==0)
- count++;
- if(upperCase==0)
- count++;
- if(lowerCase==0)
- count++;
- if(specialCharacters==0)
- count++;
- int ans = count+n;
- if(ans>=6)// cộng vào >=6
- return count;
- return 6-pw.length;// chưa lớn hơn =6 thì còn phải thêm 1 vài kí tự
- }
- }
Conal Dev