java 算法 福尔摩斯的约会

题目描述

大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 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;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/joreng/article/details/123823023