首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【华为OD-E卷 -32 猜字谜100分(python、java、c++、js、c)】

  • 25-03-07 19:21
  • 4168
  • 7420
blog.csdn.net

【华为OD-E卷 - 猜字谜100分(python、java、c++、js、c)】

题目

小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中:
变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的; 字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod” 请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回”not found”

输入描述

  • 谜面单词列表,以“,”分隔 谜底库单词列表,以","分隔

输出描述

  • 匹配到的正确单词列表,以",“分隔 如果找不到,返回"not found” 备注 单词的数量N的范围:0 < N < 1000 词汇表的数量M的范围:0 < M < 1000 单词的长度P的范围:0 < P < 20 输入的字符只有小写英文字母,没有其他字符

用例

用例一:
输入:
conection
connection,today
  • 1
  • 2
输出:
connection
  • 1
用例二:
输入:
bdni,wooood
bind,wrong,wood
  • 1
  • 2
输出:
bind,wood
  • 1

python解法

  • 解题思路:
  • 该题目要求根据输入的 issues 和 answers 两组字符串,找出每个 issue 是否在 answers 中能够找到匹配的答案。如果找到匹配的答案,返回该答案;如果找不到完全匹配的答案,则尝试通过排序后的字符匹配(忽略重复字符)来找到可能的匹配。如果两者都找不到匹配,则返回 “not found”。

解题步骤:
输入处理:

issues 和 answers 都是由逗号分隔的字符串组成,转换成列表格式以便后续处理。
解决匹配问题:

对每个 issue,首先通过 set 去重并排序,生成一个唯一的字符集表示。
如果这个唯一字符集在 answers 中存在,则返回相应的答案。
如果找不到完全匹配的答案,则对 issue 和每个 answer 进行排序,并尝试查找匹配的答案。
如果两种匹配方式都未能找到答案,则返回 “not found”。
结果输出:

所有的结果通过逗号 , 连接成字符串,输出最终的答案。

def getResult2(issues, answers):
    result = []  # 用来存储每个issue的匹配结果

    # 遍历每个问题(issue)
    for issue in issues:
        unique_issue = ''.join(sorted(set(issue)))  # 通过排序和去重生成唯一的字符表示
        found = False  # 标记是否找到了匹配的答案

        # 首先通过唯一字符匹配来查找
        for answer in answers:
            unique_answer = ''.join(sorted(set(answer)))  # 对每个答案进行相同的处理

            # 如果找到了完全匹配的答案,则添加到结果列表并跳出循环
            if unique_issue == unique_answer:
                result.append(answer)
                found = True
                break  # 结束当前问题的匹配查找

        # 如果未找到完全匹配,则对排序后的字符串进行比较
        if not found:
            sorted_issue = ''.join(sorted(issue))  # 对当前问题字符串排序
            for answer in answers:
                sorted_answer = ''.join(sorted(answer))  # 对每个答案字符串排序
                if sorted_issue == sorted_answer:
                    result.append(answer)
                    found = True
                    break  # 结束当前问题的匹配查找

        # 如果仍未找到匹配的答案,返回"not found"
        if not found:
            result.append("not found")

    # 返回结果,多个结果用逗号连接成一个字符串
    return ",".join(result)

# 输入:问题和答案的字符串,按逗号分隔
issues = input().split(",")  # 获取问题列表
answers = input().split(",")  # 获取答案列表

# 调用函数并输出结果
print(getResult2(issues, answers))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

java解法

  • 解题思路
  • 本题的任务是根据给定的 puzzleWords(谜题词)和 dictionaryWords(字典词),对每个谜题词寻找与其匹配的字典词。如果一个字典词和谜题词有相同的字符(忽略字符顺序和重复),则认为这个字典词与谜题词匹配。对于每个谜题词,若找到匹配的字典词,则输出该字典词;如果找不到匹配的字典词,则输出 “not found”。

解题步骤:
输入处理:

先读取谜题词 puzzleWords 和字典词 dictionaryWords。
将它们分别拆分为字符串数组,进行后续处理。
匹配规则:

对于每个谜题词,创建一个字符集合 puzzleSet,这个集合包含该词的唯一字符。
然后遍历字典中的每个词,检查该词的字符集合是否与当前谜题词的字符集合相同。
如果匹配,直接返回该字典词。如果遍历完字典词没有找到匹配,则返回 “not found”。
字符集合的使用:

使用 Set 来存储字符,因为集合自动去重,并且无序,使得我们可以忽略字符的顺序和重复。
输出结果:

如果找到匹配的字典词,将其添加到结果列表 matchedWords 中。
如果找不到匹配,添加 “not found”。
最终将所有结果通过逗号连接成字符串并返回。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象以读取输入
        Scanner scanner = new Scanner(System.in);

        // 读取谜题词和字典词,并用逗号分割成数组
        String[] puzzleWords = scanner.nextLine().split(",");
        String[] dictionaryWords = scanner.nextLine().split(",");

        // 调用matchWordsBySet方法,输出结果
        System.out.println(matchWordsBySet(puzzleWords, dictionaryWords));
    }

    // 用于根据字符集合匹配谜题词与字典词的函数
    public static String matchWordsBySet(String[] puzzleWords, String[] dictionaryWords) {
        List<String> matchedWords = new ArrayList<>(); // 存储匹配的字典词

        // 遍历每个谜题词
        for (String puzzle : puzzleWords) {
            boolean isMatched = false;  // 标记是否找到匹配的字典词
            Set<Character> puzzleSet = getUniqueChars(puzzle);  // 获取谜题词的字符集合

            // 遍历字典中的每个词
            for (String word : dictionaryWords) {
                // 如果谜题词的字符集合和字典词的字符集合相同
                if (puzzleSet.equals(getUniqueChars(word))) {
                    matchedWords.add(word);  // 将匹配的字典词添加到结果列表
                    isMatched = true;  // 设置匹配标志
                    break;  // 找到匹配的字典词后,跳出字典词遍历
                }
            }

            // 如果没有找到匹配的字典词,添加 "not found"
            if (!isMatched) {
                matchedWords.add("not found");
            }
        }

        // 将匹配结果列表转换为以逗号分隔的字符串并返回
        return String.join(",", matchedWords);
    }

    // 获取字符串中唯一字符的集合
    public static Set<Character> getUniqueChars(String word) {
        Set<Character> charSet = new HashSet<>();  // 使用HashSet来存储字符,自动去重
        for (char c : word.toCharArray()) {
            charSet.add(c);  // 将每个字符添加到集合中
        }
        return charSet;  // 返回字符集合
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

C++解法

  • 解题思路
更新中
  • 1

C解法

  • 解题思路

更新中
  • 1

JS解法

  • 解题思路

更新中
  • 1

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/144773177"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top