题目点击上面链接
解题思路:

  1. 总觉得这道题题目有点歧义,我的理解如下
  2. 星期是找第一对相同的大写字母且在A-G之间;小时是在第一对相同的大写字母后继续找,而不是重头开始找;分钟是找第一对相同的英文字母
  3. 用string接收个字符串并调用toCharArray()方法,将其转换为字符数组
  4. 定义weekIndex()方法用于返回第一对相同大写字母所在索引index
  5. 利用index可以取出对应大写字母,再利用switch将字母转换为对应星期几
  6. 从index+1位置循环查找第二对相同的字符,如果字符为0-9则可以减'0'得到对应数字,若为A-N可以减'A'再加10可以得到小时
  7. 遍历后两个字符数组找到相同且为英文字母的位置返回索引即可(见代码)
  8. 注意打印格式,小时和分钟如果小于10,需要先打印一个“0”

代码如下:

package BasicLevel;

import java.util.Scanner;

public class HolmesDate {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        String str2 = sc.nextLine();
        String str3 = sc.nextLine();
        String str4 = sc.nextLine();
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        char[] arr3 = str3.toCharArray();
        char[] arr4 = str4.toCharArray();

        int weekindex = weekIndex(arr1, arr2);
        String week = week(arr1[weekindex]);
        int houre = houre(arr1, arr2, weekindex);
        int minute = minute(arr3, arr4);
        System.out.print(week + " ");
        if(houre<10){
            System.out.print("0" + houre + ":");
        }else {
            System.out.print(houre + ":");
        }
        if(minute<10){
            System.out.print("0" + minute);
        }else {
            System.out.print(minute);
        }

    }

    //返回第一对相同大写字母所在索引
    public static int  weekIndex(char[] arr1, char[] arr2){
        int min = arr1.length < arr2.length ? arr1.length : arr2.length;
        int index = -1;
        for (int i = 0; i < min; i++) {
            if(arr1[i] == arr2[i] && (arr1[i] >= 'A' && arr1[i] <= 'G')){
                index = i;
                break;
            }
        }
        return index;
    }
    //将A-G返回为对应的星期
    public static String week(char c) {
        String str = null;
        switch (c) {
            case 'A':
                str = "MON";
                break;
            case 'B':
                str = "TUE";
                break;
            case 'C':
                str = "WED";
                break;
            case 'D':
                str = "THU";
                break;
            case 'E':
                str = "FRI";
                break;
            case 'F':
                str = "SAT";
                break;
            case 'G':
                str = "SUN";
                break;
        }
        return str;
    }

    //找到第二对相同字符,并返回对应小时
    public static int houre(char[] arr1, char[] arr2, int index) {
        int houre = -1;
        int min = arr1.length < arr2.length ? arr1.length : arr2.length;
        for(int i=index+1;i<min;i++) {
            //如果字符相同且为0-9
            if (arr1[i] == arr2[i] && (arr1[i] >= '0' && arr1[i] <= '9')) {
                    houre = arr1[i] - '0';
                    break;
                }
            //如果字符相同且为A-N
            if (arr1[i] == arr2[i] && (arr1[i] >= 'A' && arr1[i] <= 'N')) {
                    houre = arr1[i] - 'A' + 10;
                    break;
                }
            }
        return houre;
    }

    //找到第一对相同字母,并返回其索引作为分钟
    public static int minute(char[] arr3, char[] arr4) {
        int m = -1;
        int min = arr3.length < arr4.length ? arr3.length : arr4.length;
        for (int i = 0; i < min; i++) {
            if (arr3[i] == arr4[i] && (arr3[i] >= 'a' && arr3[i] <= 'z')) {
                m = i;
                break;
            }else if(arr3[i] == arr4[i] && (arr3[i] >= 'A' && arr3[i] <= 'Z')){
                m = i;
                break;
            }
        }
        return m;
    }
}