偶然发现的一个问题

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

写一个方法,请将任意字符串中的"<" ">"最近的之间的内容删除,并返回其余的字符串;例如:
NSString str1 = "4<5";
返回 4 <5;
NSString str2 = "abcde";
返回 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))

你可能感兴趣的:(偶然发现的一个问题)