美文网首页
偶然发现的一个问题

偶然发现的一个问题

作者: clshinem | 来源:发表于2017-11-16 19:44 被阅读0次

    偶然在简书上面发现的一个问题,用python实现了一下。应该有没有考虑到的用例,如果有人看到望指出

    写一个方法,请将任意字符串中的"<" ">"最近的之间的内容删除,并返回其余的字符串;例如:
    NSString str1 = "<hdadsdtmlsssss></dqdqw>4<5<//dwdq><uioq>";
    返回 4 <5;
    NSString str2 = "<dwqdwqdq>abc<dwdwdw>de<dddd>";
    返回 abcde;

    def sol(s):
        length = len(s)
        start = -1
        end = -1
        resultlist = []
        for i in range(0,length):
            if s[i] == '<':
                start = i
            if s[i] == '>':
                if start != -1:
                    end = i
                    resultlist.append(s[start:end+1]) 
                    start = -1# 要注意把前一次匹配到的左括号清零,不然后续的右括号会一直和最前面这个左括号匹配
                    
            
        for j in resultlist:
            print j
            s = s.replace(j,'')
        return s
    
    
    

    问题优化

    昨晚临睡前想到了这个解法的问题<1<2,3>>我的算法只能删除掉<2,3>但是删除不掉整个字符串,所以想到括号匹配的问题,用两个栈来记录左右括号的下标,但是如果删除掉了里面的括号,字符串的下标就变了,以前记录的字符串的下标就是错位的,删除的时候也没有办法用下标来删除,因为字符串的下标是变的。
    附上解法:

    def sol(s):
        scopy = []
        left = []
        right = []
        for i in range(0,len(s)):
            if s[i] == '<':
                left.append(i)
            if s[i] == '>':
                right.append(i)
                if len(left) != 0:
                    start = left.pop()
                    end = right.pop()
                    scopy.append(s[start:end+1])
        scopy = scopy[::-1]
        # print (scopy)
        for j in scopy:
            # print (j)
            s = s.replace(j,"")
            # print (s)
        return s
    print ("s = ",sol(str2))
    

    相关文章

      网友评论

          本文标题:偶然发现的一个问题

          本文链接:https://www.haomeiwen.com/subject/ggsrvxtx.html