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++ 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 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 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
|
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));
}
} |
<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 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