标签:Uber 面试题 word string 题解 mapping str pattern return
给定一个pattern和一个字符串str,查找str是否遵循相同的模式。 这里遵循的意思是一个完整的匹配,在一个字母的模式和一个非空的单词str之间有一个双向连接的模式对应。(如果a对应s,那么b不对应s。例如,给定的模式= "ab", str = "ss",返回false)。 在线评测地址:领扣题库官网 样例1输入:
pattern = "abab"
str = "redblueredblue"
输出: true
说明: "a"->"red","b"->"blue"
样例2
输入:
pattern = "aaaa"
str = "asdasdasdasd"
输出: true
说明: "a"->"asd"
样例3
输入:
pattern = "aabb"
str = "xyzabcxzyabc"
输出: false
题解:
用九章算法班中讲过的深度优先搜索算法。 这个题不能使用动态规划或者记忆化搜索,因为参数列表中 mapping 和 used 无法记录到记忆化的哈希表中。
class Solution:
"""
@param pattern: a string,denote pattern string
@param str: a string, denote matching string
@return: a boolean
"""
def wordPatternMatch(self, pattern, string):
return self.is_match(pattern, string, {}, set())
def is_match(self, pattern, string, mapping, used):
if not pattern:
return not string
char = pattern[0]
if char in mapping:
word = mapping[char]
if not string.startswith(word):
return False
return self.is_match(pattern[1:], string[len(word):], mapping, used)
for i in range(len(string)):
word = string[:i + 1]
if word in used:
continue
used.add(word)
mapping[char] = word
if self.is_match(pattern[1:], string[i + 1:], mapping, used):
return True
del mapping[char]
used.remove(word)
return False
更多题解参考:九章官网solution
标签:Uber,面试题,word,string,题解,mapping,str,pattern,return 来源: https://www.cnblogs.com/lintcode/p/13935752.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。