题目描述
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母D,代表星期四;第 2 对相同的字符是E,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母A到N表示);后面两字符串第 1 对相同的英文字母s出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入
输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。
输出
在一行中输出约会的时间,格式为DAY HH:MM,其中DAY是某星期的 3 字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。
输入样例 1
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
输出样例 1
THU 14:04
输入样例 2
23324MONops1
M000ON2??334
aavkdlAe99
bbbnnsAee
输出样例 2
MON 1:04
输入样例 3
122aaT##U2E
TwwwUeeellE
aabbAfff
SS22A33f
输出样例 3
TUE 6:05
解题思路
在第一二段找出第一个相同的字符表示星期,第二个相同的字符表示整时,后两段第一个相同的字符表示分钟。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] array = new String[4]; //开辟数组空间存储字符串
for (int i = 0; i < 4; i++) {
array[i] = scanner.nextLine();
}
String[] week = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; //星期数组
boolean day = false;//用来标记第一组字符是否找到
char ch1 , ch2 ;
for (int i = 0; (i < array[0].length()) && (i < array[1].length()); i++) { //在前两行字符串中找
ch1 = array[0].charAt(i); //ch保存第一行字符串中第i个位置的字符
if (!day && (ch1 >= 'A' && ch1 <= 'G'))// 星期只有7天,所以A-G,题目中的D是第四个字母,所以是A-G
{
if (array[0].charAt(i) == array[1].charAt(i)) { // 找到第一对相同的大写字母
day = true;// 更改标志,表示找到星期
System.out.print(week[ch1 - 'A'] + " "); //输出星期
continue;// 继续找第二对相同的字母
}
}
if (day) { //找时
if ((ch1 >= '0' && ch1 <= '9') || (ch1 >= 'A' && ch1 <= 'N')) {// 24小时的表示:0-9,A-N
if (array[0].charAt(i) == array[1].charAt(i)) {
if (ch1 <= '9')
System.out.printf("%02d:", ch1 - '0'); //输出时
else
System.out.printf("%02d:", ch1 - 'A' + 10); //输出时
break;//避免后面还有相同的字符
}
}
}
}
for (int i = 0; (i < array[2].length()) && (i < array[3].length()); i++) {// 遍历第三四行字符串
if (array[2].charAt(i) == array[3].charAt(i)) {
ch2 = array[2].charAt(i);
if ((ch2 >= 'A' && ch2 <= 'Z') || (ch2 >= 'a' && ch2 <= 'z')) {// 题目要求是相同的字母,所以包含大小写
System.out.printf("%02d", i); //输出分
break;
}
}
}
}
}