Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tìm thời gian đối xứng (palindrome) gần nhất sau thời gian cho trước trong Python


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út minute := 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 == 23 và 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ố).
  • Ngược lại:
    • Tăng h lên 1, cập nhật rev_hr_str và rev_hour.
    • Xây dựng kết quả với giờ mới và phút rev_hour.
  • 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