Given a string str which stores the time in the 24 hours format as HH:MM such that 0 ? HH ? 23 and 0 ? MM ? 59. The task is to find the next closest time which is a palindrome when read as a string. If no such string exists then print -1.
Examples:
Input: str = “21:12”
Output: 22:22
The only palindromic time possible in the given hour is 21:12
but it is not greater than the given time so the output will be
the palindromic time in the next hour i.e. 22:22
Input: str = “23:32”
Output: -1
Approach: There are three possible cases:
- If MM < reverse(HH) then the output will be HH as hours and reverse(HH) as minutes.
- If HH = 23 and MM ? 32 then output will be 00:00 i.e 12:00 A.M.
- Else output will be HH + 1 as hours and reverse(HH + 1) as minutes.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;typedef long long ll;// Function to return the required timestring getTime(string s, int n){ // To store the resultant time string res; // Hours are stored in h as integer int h = stoi(s.substr(0, 2)); // Minutes are stored in m as integer int m = stoi(s.substr(3, 2)); // Reverse of h int rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; // Reverse of h as a string string rev_hs = to_string(rev_h); if (h == 23 && m >= 32) { res = "-1"; } // If MM < reverse of (HH) else if (m < rev_h) { string temp; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + to_string(h); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } else { // Increment hours h++; // Reverse of the hour after incrementing 1 rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; rev_hs = to_string(rev_h); string temp; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + to_string(h); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } return res;}// Driver codeint main(){ string s = "21:12"; int n = s.length(); cout << getTime(s, n); return 0;} |
Java
// Java implementation of the approachimport java.util.*;class GFG { // Function to return the required time static String getTime(String s, int n) { // To store the resultant time String res = ""; // Hours are stored in h as integer int h = Integer.parseInt(s.substring(0, 0 + 2)); // Minutes are stored in m as integer int m = Integer.parseInt(s.substring(3, 3 + 2)); // Reverse of h int rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; // Reverse of h as a string String rev_hs = Integer.toString(rev_h); if (h == 23 && m >= 32) { res = "-1"; } // If MM < reverse of (HH) else if (m < rev_h) { String temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + Integer.toString(h); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } else { // Increment hours h++; // Reverse of the hour after incrementing 1 rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; rev_hs = Integer.toString(rev_h); String temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + Integer.toString(h); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } return res; } // Driver Code public static void main(String[] args) { String s = "21:12"; int n = s.length(); System.out.println(getTime(s, n)); }}// This code is contributed by// sanjeev2552 |
Python3
# Python3 implementation of the approach # Function to return the required time def getTime(s, n) : # Hours are stored in h as integer h = int(s[0 : 2]); # Minutes are stored in m as integer m = int(s[3 : 5]); # Reverse of h rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) // 10; # Reverse of h as a string rev_hs = str(rev_h) temp = "" res = "" if (h == 23 and m >= 32) : res = "-1"; # If MM < reverse of (HH) elif (m < rev_h) : # 0 is added if HH < 10 if (h < 10) : temp = "0"; temp = temp + str(h); # 0 is added if rev_h < 10 if (rev_h < 10) : res = res + temp + ":0" + rev_hs; else : res = res + temp + ":" + rev_hs; else : # Increment hours h += 1 # Reverse of the hour after incrementing 1 rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) //10; rev_hs = str(rev_h); # 0 is added if HH < 10 if (h < 10) : temp = "0"; temp = temp + str(h); # 0 is added if rev_h < 10 if (rev_h < 10) : res = res + temp + ":0" + rev_hs; else : res = res + temp + ":" + rev_hs; return res; # Driver code if __name__ == "__main__" : s = "21:12"; n = len(s); print(getTime(s, n)); # This code is contributed by AnkitRai01 |
C#
using System;class GFG{ // Function to return the required time static string GetTime(string s, int n) { // To store the resultant time string res = ""; // Hours are stored in h as integer int h = int.Parse(s.Substring(0, 2)); // Minutes are stored in m as integer int m = int.Parse(s.Substring(3, 2)); // Reverse of h int rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; // Reverse of h as a string string rev_hs = rev_h.ToString(); if (h == 23 && m >= 32) { res = "-1"; } // If MM < reverse of (HH) else if (m < rev_h) { string temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + h.ToString(); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } else { // Increment hours h++; // Reverse of the hour after incrementing 1 rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; rev_hs = rev_h.ToString(); string temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + h.ToString(); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } return res; } // Driver Code public static void Main(string[] args) { string s = "21:12"; int n = s.Length; Console.WriteLine(GetTime(s, n)); }} |
Javascript
<script>// JavaScript implementation of the approach // Function to return the required time function getTime(s,n) { // To store the resultant time let res = ""; // Hours are stored in h as integer let h = parseInt(s.substring(0, 0 + 2)); // Minutes are stored in m as integer let m = parseInt(s.substring(3, 3 + 2)); // Reverse of h let rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; // Reverse of h as a string let rev_hs = (rev_h).toString(); if (h == 23 && m >= 32) { res = "-1"; } // If MM < reverse of (HH) else if (m < rev_h) { let temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + h.toString(); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } else { // Increment hours h++; // Reverse of the hour after incrementing 1 rev_h = (h % 10) * 10 + ((h % 100) - (h % 10)) / 10; rev_hs = (rev_h).toString(); let temp = ""; // 0 is added if HH < 10 if (h < 10) temp = "0"; temp = temp + h.toString(); // 0 is added if rev_h < 10 if (rev_h < 10) res = res + temp + ":0" + rev_hs; else res = res + temp + ":" + rev_hs; } return res; } // Driver Code let s = "21:12"; let n = s.length; document.write(getTime(s, n)); // This code is contributed by avanitrachhadiya2155</script> |
PHP
<?php//PHP implementation of the approach // Function to return the required timefunction getTime( $s, $n){ // To store the resultant time $res=""; // Hours are stored in h as integer $h = intval($s.substr(0, 2)); // Minutes are stored in m as integer $m = intval($s.substr(3, 2)); // Reverse of h $rev_h = ($h % 10) * 10 + (($h % 100) - ($h % 10)) / 10; // Reverse of h as a string $rev_hs = strval($rev_h); if ($h == 23 && $m >= 32) { $res = "-1"; } // If MM < reverse of (HH) else if ($m < $rev_h) { $temp=""; // 0 is added if HH < 10 if ($h < 10) $temp = "0"; $temp = $temp . strval($h); // 0 is added if rev_h < 10 if ($rev_h < 10) $res = $res . $temp . ":0" . $rev_hs; else $res = $res. $temp .":" . $rev_hs; } else { // Increment hours $h++; // Reverse of the hour after incrementing 1 $rev_h = ($h % 10) * 10 + (($h % 100) - ($h % 10)) / 10; $rev_hs = strval($rev_h); $temp=""; // 0 is added if HH < 10 if ($h < 10) $temp = "0"; $temp = $temp . strval($h); // 0 is added if rev_h < 10 if ($rev_h < 10) $res = $res . $temp . ":0" . $rev_hs; else $res = $res . $temp . ":" . $rev_hs; } return $res;} // Driver code $s = "21:12"; $n = strlen($s); echo getTime($s, $n); return 0;// This code is contributed by ChitraNayal?> |
22:22
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Find More here on that Topic: geeksforgeeks.org/find-the-time-which-is-palindromic-and-comes-after-the-given-time/ […]