• [leetcode]10. Regular Expression Matching(UNSOLVED)


    (leetcode给的范例已经不是模糊了 根本就是导向答题者往错误的地方想,还是要自己做好分类。

    错误的思路,无法处理字符串中央的.*代表匹配0次:

    class Solution:
        def isMatch(self, s: str, p: str) -> bool:
            # s p could be empty s(a-z) p(a-z . *)
            #* mean single letter ssss not mismismis
            lenS = len(s)
            lenP = len(p)
            # deal empty
            if lenP == 0:
                return False
            #.*
            if p =='.*':
                return True
            # deal p is pure alphabet
            if '.' not in p and '*' not in p:
                if p == s:
                    return True
                else:
                    return False
            # only '.' in p
            if '.' in p and '*' not in p:
                if lenS == lenP:
                    for index in range(lenS):
                        if p[index] == '.' or p[index] == s[index]:
                            if index == lenS - 1:
                                return True
                        else:
                            return False
                else:
                    return False
            # only '*' in p and # both '.' and '*' in p
            if lenS == 0:
                return True
    
            part = p.split("*")
            if part[len(part)-1] == '':
                part.pop()                    #-1 will remove '.' use pop
            else:
                if len(part[len(part)-1]) >1:
                    #have more than one mark in the end
                    lastone = part[len(part)-1]
                    for index in range(len(lastone)):
                        if lastone[index] == '.':
                            s = s[:-1]
                            part.pop()
                        else:
                            if part[len(part) - 1] == s[-1]:
                                s = s[:-1]
                                part.pop()
    
                else:
                    # have a single letter in the end or have a '.' in the end
                    if part[len(part) - 1] == '.':  # there have a '.' in the end
                        s = s[:-1]
                        part.pop()
                    else:
                        # have a single letter in the end
                        if part[len(part) - 1] == s[-1]:
                            s = s[:-1]
                            part.pop()
    
            for index in range(len(part)):   # -1 to remove '' in the end
                if part[index] == '.':
                    part[index] = s[0:1]    #first alphabet need to compare
                if len(part[index]) >1:
                    if part[index][0:len(part[index])-1] == s[0:len(part[index])-1]:
                        s = s[len(part[index]) - 1:]
                        part[index] = part[index][-1]
                    else:
                        return False
                while(True):
                    lenIndex =len(part[index])
                    if part[index] == s[0:lenIndex]:
                        s = s[lenIndex:]
                    else:
                        break
    
            if len(s) == 0:       #not lenS
                return True
            else:
                return False
  • 相关阅读:
    Linux_C smsh1
    ACM&排序问题,操作符重载
    ACM&找双亲,并查集
    struct dirent/DIR
    关于win8如何查找出当前的密钥
    php之留言板
    php之include&require
    工作中的问题 和 所用到的知识点
    jQuery.extend 和 jQuery.fn.extend
    JavaScript 字符串函数 之查找字符方法(一)
  • 原文地址:https://www.cnblogs.com/alfredsun/p/10809698.html
Copyright © 2020-2023  润新知