Cho một chuỗi s biểu diễn thời gian theo định dạng 24 giờ HH:MM (HH từ 0-23, MM từ 0-59). Ta cần tìm thời gian gần nhất sau đó là một chuỗi đối xứng (palindrome) khi đọc như một chuỗi. Nếu không tồn tại, trả về -1.
Ví dụ, nếu đầu vào là "22:22", kết quả sẽ là "23:32".
Thuật toán giải quyết
- Tách chuỗi giờ
hour_string := s[0:2]và phútminute := int(s[3:5]). - Tính
rev_hour := int(hour_string[::-1])vàrev_hr_str := hour_string[::-1]. h := int(hour_string).- Nếu
h == 23vàminute >= 32: trả về"-1". - Ngược lại nếu
minute < rev_hour:- Xây dựng kết quả với giờ hiện tại và phút
rev_hour(định dạng đúng 2 chữ số).
- Xây dựng kết quả với giờ hiện tại và phút
- Ngược lại:
- Tăng
hlên 1, cập nhậtrev_hr_strvàrev_hour. - Xây dựng kết quả với giờ mới và phút
rev_hour.
- Tăng
- Trả về kết quả.
Ví dụ minh họa
def get_next_palindrome_time(s):
n = len(s)
hour_string = s[0:2]
minute = int(s[3:5])
rev_hour = int(hour_string[::-1])
rev_hr_str = hour_string[::-1]
h = int(hour_string)
temp = ""
res = ""
if h == 23 and minute >= 32:
res = "-1"
elif minute < rev_hour:
if h < 10:
temp = "0"
temp += str(h)
if rev_hour < 10:
res = temp + ":0" + rev_hr_str
else:
res = temp + ":" + rev_hr_str
else:
h += 1
rev_hr_str = str(h)[::-1]
rev_hour = int(rev_hr_str)
if h < 10:
temp = "0"
temp += str(h)
if rev_hour < 10:
res = temp + ":0" + rev_hr_str
else:
res = temp + ":" + rev_hr_str
return res
s = "22:22"
print(get_next_palindrome_time(s)) # 23:32
Đầu vào
"22:22"
Đầu ra
23:32