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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM