题解 | #ranko的手表#
ranko的手表
https://www.nowcoder.com/practice/37275e85ae7c4453920eae6b9f7f45fc
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 /** 思路: 1、最小间隔时间、最大间隔时间 2、第一次的小时、分钟,每一位单独处理 3、第二次小时分钟,每一位单独处理 4、注意各种特殊情况的处理,比如小时第二位,第一次比第二次大,就要将第一位+1 5、如果分钟,第一次比第二次大,就要将小时往前推,前提是第一次和第二次在所有值填充完了以后,小时相同 6、最大相差,直接去各自的极值,不用考虑各种重合情况 */ public class Main { public static void main(String[] args) throws IOException{ BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); //获取输入事件 String time1 = buff.readLine(); String time2 = buff.readLine(); int min = Math.max(1, min(time1, time2)); int max = max(time1,time2); System.out.println(min + " " + max); } //找到两个时间最小差距 public static int min(String time1,String time2) { //取最大时间 //取时间1的时分 String hour1 = time1.split(":")[0]; String minute1 = time1.split(":")[1]; //取最大时间 //获取时间2的时分 String hour2 = time2.split(":")[0]; String minute2 = time2.split(":")[1]; //第一行小时如果是? if(hour1.charAt(0) == '?' && hour2.charAt(0) != '?') { hour1 = hour2.charAt(0) + "" + hour1.charAt(1); } if(hour1.charAt(0) == '?' && hour2.charAt(0) == '?') { if(hour1.charAt(1)>hour2.charAt(1)) { hour1 = "0" + hour1.charAt(1); hour2 = "1" + hour2.charAt(1); }else { hour1 = "0" + hour1.charAt(1); hour2 = "0" + hour2.charAt(1); } } if(hour1.charAt(1) == '?') { if(hour1.charAt(0) == '2') { hour1 = hour1.charAt(0) + "3"; }else { hour1 = hour1.charAt(0) + "9"; } } if(minute1.charAt(0) == '?') { minute1 = "5" + minute1.charAt(1); } if(minute1.charAt(1) == '?') { minute1 = minute1.charAt(0) + "9"; } if(hour2.charAt(0) == '?') { if(hour1.charAt(1)> hour2.charAt(1)) { hour2 = (Integer.parseInt(hour1.charAt(0) + "") + 1) + "" + hour2.charAt(1); } } if(hour2.charAt(1) == '?') { if(hour1.charAt(0) == hour2.charAt(0)) { hour2 = hour2.charAt(0) + "" + hour1.charAt(1); }else { hour2 = hour2.charAt(0) + "0"; } } if(minute2.charAt(0) == '?') { if(hour1.equals(hour2)) { minute2 = minute1.charAt(0) + "" + minute2.charAt(1); }else { minute2 = "0" + minute2.charAt(1); } } if(minute2.charAt(1) == '?') { if(hour1.equals(hour2) && (minute1.charAt(0) == minute2.charAt(0))) { minute2 = minute2.charAt(0) + "" + minute1.charAt(1); }else { minute2 = minute2.charAt(0) + "0"; } } //小时相互减 int resultH = Integer.parseInt(hour2) - Integer.parseInt(hour1); //分钟 if(Integer.parseInt(minute2) < Integer.parseInt(minute1)) { if(resultH == 0) { resultH += 1; } } int minute = Integer.parseInt(minute2) - Integer.parseInt(minute1); return resultH*60 + minute; } //找到最大差距 public static int max(String time1,String time2) { //取最大时间 //取时间1的时分 String hour1 = time1.split(":")[0]; String minute1 = time1.split(":")[1]; //取最大时间 //获取时间2的时分 String hour2 = time2.split(":")[0]; String minute2 = time2.split(":")[1]; //第一位小时如果是? if(hour1.charAt(0) == '?') { hour1 = "0" + hour1.charAt(1); } if(hour1.charAt(1) == '?') { hour1 = hour1.charAt(0) + "0"; } if(minute1.charAt(0) == '?') { minute1 = "0" + minute1.charAt(1); } if(minute1.charAt(1) == '?') { minute1 = minute1.charAt(0) + "0"; } //第二行的时间 if(hour2.charAt(0) == '?') { hour2 = "2" + hour2.charAt(1); } if(hour2.charAt(1) == '?') { if(hour2.charAt(0) == '2') { hour2 = hour2.charAt(0) + "3"; }else { hour2 = hour2.charAt(0) + "9"; } } if(minute2.charAt(0) == '?') { minute2 = "5" + minute2.charAt(1); } if(minute2.charAt(1) == '?') { minute2 = minute2.charAt(0) + "9"; } //小时相互减 int resultH = Integer.parseInt(hour2) - Integer.parseInt(hour1); //分钟 int minute = Integer.parseInt(minute2) - Integer.parseInt(minute1); return resultH*60 + minute; } }