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
posted @ 2021-09-06 14:31  上海-悠悠  阅读(1140)  评论(0编辑  收藏  举报