[Series] Mỗi tuần một bài toán Hackerrank (số thứ 5)

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

  1. static int minimumNumber(int n, String password) {
  2.         // Return the minimum number of characters to make the password strong
  3.         char[] pw = password.toCharArray();
  4.         int specialCharacters =0;
  5.         int numbers =0;
  6.         int lowerCase =0;
  7.         int upperCase =0;
  8.         String special_characters = “!@#$%^&*()-+”;
  9.         for(int i=0;i<n;i++){
  10.             if((int)pw[i]>=48 && (int)pw[i]<=57)
  11.                 numbers++;//Đếm số number
  12.             else if((int)pw[i]>=65 && (int)pw[i]<=90)
  13.                 upperCase++;//đếm chữ in hoa
  14.             else if((int)pw[i]>=97 && (int)pw[i]<=122)
  15.                 lowerCase++;// đếm chữ thường
  16.             else if(special_characters.contains(“”+pw[i]))
  17.                 specialCharacters++;// dùng contains kiểm tra kí tự đặc biệt rồi đếm
  18.             if(numbers>=1 && upperCase >=1 && lowerCase>=1 && pw.length>=6 && specialCharacters>=1){
  19.                 return 0;//nếu thỏa mãn điều kiện bài toán thì return luôn
  20.             }
  21.         }
  22.         if(n >=6){
  23.             int count =0;
  24.             if(numbers==0)
  25.                 count++;
  26.             if(upperCase==0)
  27.                 count++;
  28.             if(lowerCase==0)
  29.                 count++;
  30.             if(specialCharacters==0)
  31.                 count++;
  32.             return count;
  33.         }else{//nếu  độ dài ban đầu nhỏ hơn 6 thì cần kiểm tra 2 trường hợp
  34.             int count =0;
  35.             if(numbers==0)
  36.                 count++;
  37.             if(upperCase==0)
  38.                 count++;
  39.             if(lowerCase==0)
  40.                 count++;
  41.             if(specialCharacters==0)
  42.                 count++;
  43.             int ans = count+n;
  44.             if(ans>=6)// cộng vào >=6
  45.                 return count;
  46.             return 6-pw.length;// chưa lớn hơn =6 thì còn phải thêm 1 vài kí tự
  47.         }
  48.     }

Conal Dev

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Facebook