Given string str which stores the time in the 24 hours format as “HH: MM”. The task is to find the minimum minutes that need to be added to make time palindromic.
Examples:
Input: str = “05:39”
Output: 11
Explanation: It takes 11 minutes for minute value to become 50, 05:50 is a palindromic timeExamples:
Input: str = “13:31”
Output: 0
Explanation: Since, 13:31 is already palindromic therefore, 0 minutes is required
Approach:
The idea is to greedily increment the minute value until the time value becomes palindrome. Run a while loop to increment minute value and simultaneously check if hour value and minute value form a palindrome or not.
While incrementing minute and hour values make sure to check for the base condition when the minute value is 60 and the hour value is 24.
Below is the implementation of the above approach :
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to get the required minutes int get_palindrome_time(string str) { int hh, mm; // Storing hour and minute value // in integral form hh = (str[0] - 48) * 10 + (str[1] - 48); mm = (str[3] - 48) * 10 + (str[4] - 48); int requiredTime = 0; // Keep iterating till first digit // hour becomes equal to second // digit of minute and second digit // of hour becomes equal to first // digit of minute while (hh % 10 != mm / 10 || hh / 10 != mm % 10) { ++mm; // If mins is 60, increase hour, and // reinitilialized to 0 if (mm == 60) { mm = 0; ++hh; } // If hours is 60, reinitialized to 0 if (hh == 24) hh = 0; ++requiredTime; } // Return the required time return requiredTime; } // Driver Code int main() { // Given Time as a string string str = "05:39" ; // Function Call cout << get_palindrome_time(str) << endl; } |
Java
// Java program for the above approach class GFG{ // Function to get the required minutes public static int get_palindrome_time(String str) { int hh, mm; // Storing hour and minute value // in integral form hh = (str.charAt( 0 ) - 48 ) * 10 + (str.charAt( 1 ) - 48 ); mm = (str.charAt( 3 ) - 48 ) * 10 + (str.charAt( 4 ) - 48 ); int requiredTime = 0 ; // Keep iterating till first digit // hour becomes equal to second // digit of minute and second digit // of hour becomes equal to first // digit of minute while (hh % 10 != mm / 10 || hh / 10 != mm % 10 ) { ++mm; // If mins is 60, increase hour, and // reinitilialized to 0 if (mm == 60 ) { mm = 0 ; ++hh; } // If hours is 60, reinitialized to 0 if (hh == 24 ) hh = 0 ; ++requiredTime; } // Return the required time return requiredTime; } // Driver code public static void main(String[] args) { // Given Time as a string String str = "05:39" ; // Function Call System.out.println(get_palindrome_time(str)); } } // This code is contributed by divyeshrabadiya07 |
Python3
# Python3 program for the above approach # Function to get the required minutes def get_palindrome_time( str ): # Storing hour and minute value # in integral form hh = (( ord ( str [ 0 ]) - 48 ) * 10 + ( ord ( str [ 1 ]) - 48 )) mm = (( ord ( str [ 3 ]) - 48 ) * 10 + ( ord ( str [ 4 ]) - 48 )) requiredTime = 0 # Keep iterating till first digit # hour becomes equal to second # digit of minute and second digit # of hour becomes equal to first # digit of minute while (hh % 10 ! = mm / / 10 or hh / / 10 ! = mm % 10 ): mm + = 1 # If mins is 60, increase hour, and # reinitilialized to 0 if (mm = = 60 ): mm = 0 hh + = 1 # If hours is 60, reinitialized to 0 if (hh = = 24 ): hh = 0 requiredTime + = 1 ; # Return the required time return requiredTime if __name__ = = "__main__" : # Given Time as a string str = "05:39" ; # Function call print (get_palindrome_time( str )); # This code is contributed by rutvik_56 |
C#
// C# program for the above approach using System; class GFG{ // Function to get the required minutes public static int get_palindrome_time( string str) { int hh, mm; // Storing hour and minute value // in integral form hh = (str[0] - 48) * 10 + (str[1] - 48); mm = (str[3] - 48) * 10 + (str[4] - 48); int requiredTime = 0; // Keep iterating till first digit // hour becomes equal to second // digit of minute and second digit // of hour becomes equal to first // digit of minute while (hh % 10 != mm / 10 || hh / 10 != mm % 10) { ++mm; // If mins is 60, increase hour, // and reinitilialized to 0 if (mm == 60) { mm = 0; ++hh; } // If hours is 60, reinitialized to 0 if (hh == 24) hh = 0; ++requiredTime; } // Return the required time return requiredTime; } // Driver code public static void Main( string [] args) { // Given Time as a string string str = "05:39" ; // Function Call Console.Write(get_palindrome_time(str)); } } // This code is contributed by rutvik_56 |
Javascript
<script> // Javascript program for the above approach // Function to get the required minutes function get_palindrome_time(str) { let hh, mm; // Storing hour and minute value // in letegral form hh = (str[0].charCodeAt() - 48) * 10 + (str[1].charCodeAt() - 48); mm = (str[3].charCodeAt() - 48) * 10 + (str[4].charCodeAt() - 48); let requiredTime = 0; // Keep iterating till first digit // hour becomes equal to second // digit of minute and second digit // of hour becomes equal to first // digit of minute while (hh % 10 != Math.floor(mm / 10) || Math.floor(hh / 10) != mm % 10) { ++mm; // If mins is 60, increase hour, and // reinitilialized to 0 if (mm == 60) { mm = 0; ++hh; } // If hours is 60, reinitialized to 0 if (hh == 24) hh = 0; ++requiredTime; } // Return the required time return requiredTime; } // Driver Code // Given Time as a string let str = "05:39" ; // Function Call document.write(get_palindrome_time(str.split( '' ))); </script> |
11
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!