【华为OD机试真题】分界线(java&python)
分界线
时间限制:1s空间限制:32MB限定语言:不限
题目描述:
电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己, 于是将报刊上的字剪切下来,剪拼成匿名信。现在有一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个字母 的顺序。解释:单词’on’允许通过单词’no’进行替代
报纸代表newspaper,匿名信代表anonymousLetter,求报纸内容是否可以拼成匿 名信。
输入描述:
第一行输入newspaper内容,包括1-N个字符串,用空格分开
第二行输入anonymousLetter内容,包括1-N个字符串,用空格分开
1、newspaper和anonymousLetter的字符串由小写英文字母组成且每个字母只能 使用一次
2、newspaper内容中的每个字符串字母顺序可以任意调整,但必须保证字符串的完 整性(每个字符串不能有多余字母)
3. 1<N<100,1<= newspaper.length, anonymousLetter.length <= 104
输出描述:
如果报纸可以拼成匿名信返回ture,否则返回false
示例1
输入:
ab cd
ab
输出:
true
示例2
输入:
ab ef
aef
输出:
false
示例3
输入:
ab bcd ef
cbd fe
输出:
true
示例4
输入:
ab bcd ef
cd ef
输出:
false
解题思路:
题目的意思就是希望匿名信中的所有字符串都能在报纸上找到对应的字符串(字符顺序可 以不相同,但是字符一点要全匹配);且报纸上已匹配的字符串,就不能再匹配其他字符串了。题目比较简单,双层for循环就能搞定,匹配字符的方法也有很多。博主使用的是字符排序匹配法,大家也可以使用其他方法。
java代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] newspaper = sc.nextLine().split(" ");
String[] anonymousLetter = sc.nextLine().split(" ");
boolean res = true;
for(String anony : anonymousLetter){
for(int i=0; i<newspaper.length; i++){
String news = newspaper[i];
if(anony.length() == news.length() && handle( news, anony)){ //长度相
//等才有资格匹配
newspaper[i] = " "; //使用过的字符串之后就不能使用了
break;
}
if(i == newspaper.length-1){ //遍历到最后都没有匹配的,直接false
res = false;
}
}
if(!res){ //已经失败了,跳出循环
break;
}
}
System.out.println(res);
}
/**
* 通过char 字符的排序,然后判断是否一一匹配,只要一个不匹配,直接false
* @param news 报纸上的字符串
* @param anony 匿名信上的字符串
* @return
*/
public static boolean handle(String news, String anony){
char[] newsChar = news.toCharArray();
char[] anonyChar = anony.toCharArray();
Arrays.sort(newsChar);
Arrays.sort(anonyChar);
boolean isTrue = true;
for(int i=0; i<newsChar.length; i++){
if(newsChar[i] != anonyChar[i]){
isTrue = false;
}
}
return isTrue;
}
}
python代码:
# -*- coding = utf-8 -*-
# @Time: 2023/4/11
# @Author : MR
# @File : boundary.py
# @Software : PyCharm
import sys
def handle(news, anony):
newsChar = sorted(news)
anonyChar = sorted(anony)
return newsChar == anonyChar
newspaper = input().split()
anonymousLetter = input().split()
res = True
for anony in anonymousLetter:
for i in range(len(newspaper)):
news = newspaper[i]
if len(anony) == len(news) and handle(news, anony):
newspaper[i] = " "
break
if i == len(newspaper) - 1:
res = False
if not res:
break
print(str(res).lower())
【华为OD机试真题】可以转到CSDN相关专栏订阅学习:https://blog.csdn.net/weixin_45541762/article/details/129903356
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】