[Buổi 20][Chuỗi][HW] Bài 3: Hồ sơ độ mạnh mật khẩu
Hồ sơ độ mạnh mật khẩu
Bối cảnh
Một hệ thống không yêu cầu quyết định mật khẩu hợp lệ/không hợp lệ ngay, mà tạo "hồ sơ độ mạnh" để lớp kiểm tra sau sử dụng. Với một chuỗi bất kỳ, cần đếm số chữ hoa, chữ thường, chữ số và ký tự khác; đồng thời tìm độ dài lớn nhất của một đoạn ký tự liên tiếp thuộc cùng nhóm (uppercase/lowercase/digit/other). Ví dụ AAa11! có run nhóm dài nhất là 2.
Bài Medium buộc người học không chỉ đếm độc lập mà còn duy trì state của nhóm trước đó và độ dài run hiện tại. Việc dùng các hàm <cctype> phải được đặt sau khi ép ký tự sang unsigned char để tránh hành vi không xác định ở dữ liệu mở rộng. Input được đọc bằng getline nên có thể chứa space; space được xếp vào nhóm other.
Yêu cầu
- Đọc toàn bộ một dòng.
- Đếm uppercase/lowercase/digit/other.
- Tìm longest run của cùng nhóm ký tự.
- In
upper lower digit other longestRun.
Input
Một dòng bất kỳ, có thể rỗng.
Output
Một dòng 5 số.
Ràng buộc
|s|≤5000.
Ví dụ 1
Input
AAaa11!!
Output
2 2 2 2 2
Giải thích
Chuỗi AAaa11!! có 2 chữ hoa A, 2 chữ thường a, 2 chữ số 1 và 2 ký tự ! thuộc nhóm other. Các run theo nhóm là AA, aa, 11, !!, mỗi run dài 2, nên longestRun=2. Output là 2 2 2 2 2.
Ví dụ 2
Input
Password123!
Output
1 7 3 1 7
Giải thích
Password123! có một chữ hoa P, 7 chữ thường assword, ba chữ số 123 và một dấu !. Run chữ thường dài nhất là 7, lớn hơn run digit dài 3, nên kết quả 1 7 3 1 7.
Thông tin học tập
- Module: M06
- Buổi: B20
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: std::string, character classes, longest run, cctype, validation summary
- Giới hạn kiến thức: B01-B20
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments