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 time string 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 code int main() { string s = "21:12" ; int n = s.length(); cout << getTime(s, n); return 0; } |
Java
// Java implementation of the approach import 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 time function 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!