python面试题-如"上海 深圳 深圳 上海",要求输入一个匹配模式,比如: aabb,判断是否符合
面试题
判断一个字符串的构成是词+空格的组合,如"上海 深圳 深圳 上海",要求输入一个匹配模式,
比如aabb,来判断该字符串是否符合该模式
1.pattern="abba" s="上海 深圳 深圳 上海" 返回true
2.pattern="aabb" s="上海 深圳 深圳 上海" 返回false
3.pattern="baab" s="上海 深圳 深圳 上海" 返回true
解决思路1
先写个匹配规则函数,如输入["a","b","b","a"],函数返回[1, 2, 2, 1]
输入["上海", "深圳", "深圳", "上海"],函数返回[1, 2, 2, 1]
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
def pattern_rule(s1):
"""
传s1返回其匹配规则如:1221
:param s1: s1是传入的list->["a","b","b","a"]
或传入list->["上海", "深圳", "深圳", "上海"]
:return: list->[1, 2, 2, 1]
"""
result = []
temp = []
num = 0
for i in s1:
if i not in temp:
temp.append(i)
num += 1
result.append(num)
else:
result.append(temp.index(i)+1)
return result
if __name__ == '__main__':
s="上海 深圳 深圳 上海"
print(pattern_rule(s.split(" ")))
pattern="abba"
print(pattern_rule(list(pattern)))
运行结果
[1, 2, 2, 1]
[1, 2, 2, 1]
通过判断函数返回的结果,来判断字符串是不是该模式
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
def pattern_rule(s1):
"""
传s1返回其匹配规则如:1221
:param s1: s1是传入的list->["a","b","b","a"]
或传入list->["上海", "深圳", "深圳", "上海"]
:return: list->[1, 2, 2, 1]
"""
result = []
temp = []
num = 0
for i in s1:
if i not in temp:
temp.append(i)
num += 1
result.append(num)
else:
result.append(temp.index(i)+1)
return result
def is_pattern(pattern="abba", s="上海 深圳 深圳 上海"):
"""判断2个的结果是否一致"""
r1 = pattern_rule(s.split(" "))
r2 = pattern_rule(list(pattern))
return "true" if r1 == r2 else "false"
if __name__ == '__main__':
print(is_pattern(pattern="abba"))
print(is_pattern(pattern="aabb"))
print(is_pattern(pattern="baab"))
print(is_pattern(pattern="abc", s="上海 深圳 杭州"))
运行结果
true
false
true
true
解决思路2
直接拿2个字符串当成列表循环对比,用一个临时字典temp,保存为键值对格式:{'a': '上海', 'b': '深圳'}
如果下一个key在字典中存在,就不添加字典,从字典取值跟s里面的值对比
如果下一个key在字典中不存在,就添加字典
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
def is_pattern(pattern="acba", s="上海 深圳 深圳 上海"):
p1 = list(pattern)
s1 = s.split(" ")
if not p1 or not s1 or len(p1) != len(s1):
return False
temp = {}
flag = True
for i in range(len(p1)):
if p1[i] not in temp.keys() and s1[i] not in temp.values():
temp[p1[i]] = s1[i]
else:
if temp.get(p1[i]) != s1[i]:
flag = False
return flag
if __name__ == '__main__':
print(is_pattern(pattern="abba", s="上海 深圳 深圳 上海"))
print(is_pattern(pattern="acba", s="上海 深圳 深圳 上海"))
print(is_pattern(pattern="baab", s="上海 深圳 深圳 上海"))
print(is_pattern(pattern="abc", s="上海 深圳 北京"))
print(is_pattern(pattern="aabc", s="上海 深圳 北京 上海"))
print(is_pattern(pattern="abca", s="上海 深圳 北京 上海"))
运行结果
True
False
True
True
False
True