public class GoogleOA_WatchTime {
static
class Solution {
public String solution(String S) {
int[] digits = new int[4];
int[] counts = new int[10];
for (int i = 0; i < 4; i++) {
digits[i] = (i > 1 ? S.charAt (i + 1) : S.charAt (i)) - '0';
counts[digits[i]]++;
}
int hour = digits[0] * 10 + digits[1], minute = digits[2] * 10 + digits[3];
for (int i = 0; i < 24 * 60; i++) {
if (++minute == 60) {
minute = 0;
if (++hour == 24)
hour = 0;
}
if (isPermutation (counts, hour, minute))
break;
}
return String.format ("%d%d:%d%d", hour / 10, hour % 10, minute / 10, minute % 10);
}
boolean isPermutation (int[] counts, int hour, int minute) {
int[] new_counts = new int[counts.length];
new_counts[hour / 10]++;
new_counts[hour % 10]++;
new_counts[minute / 10]++;
new_counts[minute % 10]++;
for (int i = 0; i < counts.length; i++) {
if (counts[i] != new_counts[i])
return false;
}
return true;
}
}
public static void main(String[] args) {
GoogleOA_WatchTime.Solution tester = new GoogleOA_WatchTime.Solution();
String[] inputs = {
"12:34", "12:43",
"11:00", "00:11",
"00:01", "00:10",
"23:59", "23:59",
"23:58", "23:58",
};
for (int i = 0; i < inputs.length / 2; i++) {
System.out.println (Printer.separator ());
String S = inputs [2 * i], ans = inputs[2 * i + 1], output = tester.solution (S);
System.out.printf ("%s -> %s, expected: %s\n",
S, Printer.wrap (output, output.equals (ans) ? 92 : 91), ans
);
}
}
}
Problem Description