📜  门| GATE-CS-2006 |第 38 题(1)

📅  最后修改于: 2023-12-03 15:12:41.356000             🧑  作者: Mango

题目

本题为 GATE-CS-2006 的第 38 题。

题目描述:给定一个字符串,编写一个程序来检查它是否是由一组单词组成的,每个单词都是从先前给定的词典中提取的。

输入格式:一个字符串。

输出格式:如果给定的字符串由词典中的单词组成,则输出 True,否则输出 False

问题分析

本题需要判断一个字符串是否由一组单词组成,可以将字符串按照空格进行分隔,判断每个分隔出的字符串是否在给定的词典中。需要注意的是,分隔后的字符串需要忽略大小写,并且在判断时需要考虑到相同单词在词典中可能有不同的大小写形式,需要将其归一化为比较。

解决方案

def is_valid_string(s: str, words: list[str]) -> bool:
    s_list = s.split()
    word_set = set(words)
    for w in s_list:
        w = w.lower()
        if w not in word_set:
            if w.capitalize() not in word_set:
                return False
    return True

代码解析:

  1. 将字符串按照空格进行分隔,得到字符串列表 s_list
  2. 将词典列表 words 转换为集合 word_set,便于后续判断。
  3. 对于字符串列表中的每一个字符串 w
    • 将其转换为小写字母形式。
    • 如果 w 不在词典集合中,并且将其首字母大写后仍不在词典集合中,返回 False。
  4. 如果所有字符串都能在词典中找到,则返回 True。

结语

本题主要考查了对字符串的切割和大小写转换的功底,同时注意到相同单词可能有不同大小写形式的情况,需要将其归一化再进行比较。