Related Articles
Find the time which is palindromic and comes after the given time
• Difficulty Level : Medium
• Last Updated : 22 Oct, 2019

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: There are three possible cases:

1. If MM < reverse(HH) then the output will be HH as hours and reverse(HH) as minutes.
2. If HH = 23 and MM ≥ 32 then output will be -1.
3. 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 ``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`

## PHP

 `= 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``?>`
Output:
```22:22
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up