zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    iOS.CM5.CM4.CM2
    iOS.Library.Architecture
    iOS.Info.plist
    iOS.ARM-Assembly
    Tools.Png.Compression
    MacDev.GetArchOfLibrary
    iOS.C
    iOS.Notification.Bar.Color
    iOS.-.cxx_destruct
    iOS.UITableView.SectionIndex
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15229916.html
Copyright © 2011-2022 走看看