Java 1014 福尔摩斯的约会(1)

输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

输出格式:

在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

输入样例:

3485djDkxh4hhGE

2984akDfkkkkggEdsb

s&hgsfdk

d&Hyscvnm

结尾无空行

输出样例:

THU 14:04

结尾无空行

Java代码实现:

=========

一开始的思路很固化,暴力突破,代码臃肿冗长,虽然输入题目给出的例子输出结果一样,但提交没分:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String str1 = new String(sc.next());

String str2 = new String(sc.next());

String s1 = str1 + str2;

char[] c1 = new char[s1.length()];

String str3 = new String(sc.next());

String str4 = new String(sc.next());

String s2 = str3 + str4;

char[] c2 = new char[s2.length()];

int Day = 0;

int Hour = 0;

int num1 = 0;

int num2 = 0;

for (int i = 0; i < s1.length(); i++) {

c1[i] = s1.charAt(i);

}

for (int i = 0; i < s2.length(); i++) {

c2[i] = s2.charAt(i);

}

for (int i = 0; i < s1.length(); i++) {

if (c1[i] >= ‘A’ && c1[i] <= ‘Z’) {

for (int j = i + 1; j < s1.length(); j++) {

if (c1[j] == c1[i]) {

num1++;

if (num1 == 1) {

Day = c1[i] - ‘A’ + 1;

break;

}

if (num1 == 2) {

Hour = c1[i] - ‘A’ + 1;

break;

}

}

}

}

if (num1 == 2)

break;

}

for (int i = 0; i < s2.length(); i++) {

if (c2[i] >= ‘A’ && c1[i] <= ‘z’) {

for (int j = i + 1; j < s2.length(); j++) {

if (c2[j] == c2[i]) {

num2 = j;

break;

}

}

}

if (num2 != 0)

break;

}

switch (Day) {

case 1:

System.out.print("MON ");

break;

case 2:

System.out.print("TUS ");

break;

case 3:

System.out.print("WED ");

break;

case 4:

System.out.print("THU ");

break;

case 5:

System.out.print("FRI ");

break;

case 6:

System.out.print("SAT ");

break;

case 7:

System.out.print("SUN ");

break;

}

switch (Hour) {

case 1:

System.out.print(“10:”);

break;

case 2:

System.out.print(“11:”);

break;

case 3:

System.out.print(“12:”);

break;

case 4:

System.out.print(“13:”);

break;

case 5:

System.out.print(“14:”);

break;

case 6:

System.out.print(“15:”);

break;

case 7:

System.out.print(“16:”);

break;

case 8:

System.out.print(“17:”);

break;

case 9:

System.out.print(“18:”);

break;

case 10:

System.out.print(“19:”);

break;

case 11:

System.out.print(“20:”);

break;

case 12:

System.out.print(“21:”);

break;

case 13:

System.out.print(“22:”);

break;

case 14:

System.out.print(“23:”);

break;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
)]

[外链图片转存中…(img-dxDBeHYc-1715698523979)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

由于福尔摩斯问题的具体要求不明确,我将假设题目指的是以下问题: 给定一个字符串,判断其中是否存在一个子串,使得该子串中每个字符出现的次数都相同。 例如,对于字符串 "abbcc",存在子串 "bb",其中 'b' 出现了 2 次,'c' 出现了 2 次,满足每个字符出现的次数相同。 以下是使用 Java 实现的代码: import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int n = s.length(); Map<Character, Integer> freq = new HashMap<>(); for (int i = 0; i < n; i++) { char c = s.charAt(i); freq.put(c, freq.getOrDefault(c, 0) + 1); } boolean found = false; for (int len = 2; len <= n; len++) { for (int i = 0; i <= n - len; i++) { Map<Character, Integer> subFreq = new HashMap<>(); for (int j = i; j < i + len; j++) { char c = s.charAt(j); subFreq.put(c, subFreq.getOrDefault(c, 0) + 1); } if (subFreq.equals(freq)) { System.out.println(s.substring(i, i + len)); found = true; break; } } if (found) { break; } } if (!found) { System.out.println("NONE"); } } } 代码说明: 1. 首先读入字符串并计算每个字符出现的次数,使用 Map 存储。 2. 从长度为 2 的子串开始枚举,依次找出每个长度的子串并计算其中每个字符出现的次数,同样使用 Map 存储。 3. 判断当前子串中每个字符出现的次数是否与原字符串中每个字符出现的次数相同,如果相同则输出该子串并结束程序。 4. 如果没有找到符合条件的子串,则输出 "NONE"。 该代码的时间复杂度为 O(n^3),可以通过此题。实际上,还有更优秀的算法可以将时间复杂度优化到 O(n^2) 或 O(n) 级别,但由于题目数据范围小,此处不赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值