Đề bài
Một form đăng ký nhận tuổi dưới dạng văn bản. Một mục nhập là hợp lệ khi, sau khi xóa khoảng trắng ở cả hai đầu, nó chỉ gồm các chữ số (không có dấu) và giá trị của nó nằm trong khoảng từ 0 đến 150 bao gồm cả hai đầu.
Hãy tìm mục nhập không hợp lệ đầu tiên để form có thể chỉ ra cho người dùng.
Hãy triển khai first_invalid_age(values).
Đầu vào
values: Các tuổi đã nhập, theo thứ tự trong form.
Đầu ra
Trả về chỉ số của mục nhập không hợp lệ đầu tiên, hoặc -1 nếu tất cả đều hợp lệ.
Ràng buộc
0 ≤ số mục ≤ 10,000
Mỗi mục có tối đa 20 ký tự
Ví dụ
Đầu vào:
values = ["25", " 40 ", "abc", "200"]
Kết quả mong đợi:
expected = 2
Đầu vào:
std::vector<std::string> values = {"25", " 40 ", "abc", "200"};
Kết quả mong đợi:
long long expected = 2;
Đầu vào:
string[] values = new string[] {"25", " 40 ", "abc", "200"};
Kết quả mong đợi:
long expected = 2;
Giải thích
"25" và " 40 " (đã xóa khoảng trắng) là hợp lệ; "abc" ở chỉ số 2 là mục nhập không hợp lệ đầu tiên.
Đầu vào:
values = ["0", "150", "007"]
Kết quả mong đợi:
expected = -1
Đầu vào:
std::vector<std::string> values = {"0", "150", "007"};
Kết quả mong đợi:
long long expected = -1;
Đầu vào:
string[] values = new string[] {"0", "150", "007"};
Kết quả mong đợi:
long expected = -1;
Giải thích
Cả ba đều là các chữ số trong khoảng từ 0 đến 150 (007 là 7), nên đáp án là -1.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Cắt khoảng trắng rồi kiểm tra chuỗi không rỗng và chỉ gồm chữ số.
Gợi ý 2
Chỉ sau đó mới so giá trị với 150.
Gợi ý 3
Dấu trừ làm mục không hợp lệ, còn 007 là số 7 hợp lệ.
Độ phức tạp mong đợi
thời gian O(tổng độ dài), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.