赞
踩
在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示: 示例 1: 输入: num = "8733", words = ["tree", "used"] 输出: ["tree", "used"] 示例 2: 输入: num = "2", words = ["a", "b", "c", "d"] 输出: ["a", "b", "c"] 提示: num.length <= 1000 words.length <= 500 words[i].length == num.length num中不会出现 0, 1 这两个数字
一、常规法
遍历words与num一一对比
class Solution:
def getValidT9Words(self, num: str, words: List[str]) -> List[str]:
table = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'}
return list(filter(lambda word: all(ch in table[key] for key, ch in zip(num, word)), words))
二、正则表达
class Solution:
def getValidT9Words(self, num: str, words: List[str]) -> List[str]:
pattern = ["[a-c]", "[d-f]", "[g-i]", "[j-l]", "[m-o]", "[p-s]", "[t-v]", "[w-z]"]
lnum = len(num)
sb = ""
for i in range(lnum):
sb += pattern[int(num[i])-2]
res = []
for word in words:
if re.match(sb, word):
res.append(word)
return res
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。