偶然在简书上面发现的一个问题,用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))