【每日一题】844. Backspace String Compare

在这里插入图片描述

题目意思,#号相当于删除符,当出现#时,需要删除它前面的那个字符,如果出现连续n个#号,那么将删除第一个#前面的n个字符。如果#前面已经没有字符了,那么就不删除了。

直观来看,从后往前遍历,当碰到#号的时候就删除#号前面的字符。当然这里有一些细节

  • 当出现多个连续#号的时候,就不是直接删除#号前面的字符了,而是需要记录#号出现的个数,记作num
  • 当前字符是#时,num++,当前字符不是#时,判断num是否大于0,如果大于0,说明之前出现过#,那么删除当前字符,并使num–
  • python中无法直接对字符串做删除操作,先把字符串转换为列表在进行删除操作
# 遍历了两次,效率有点拉跨
class Solution:
    def convert(self, string):
        s = list(string)         #转成list
        pos = len(s) - 1
        num = 0
        while (pos >= 0):  #从后往前遍历
            if (s[pos] != '#' and num > 0):
                num -= 1
                del s[pos] 		#删除当前字符
            elif (s[pos] == '#'):
                del s[pos]
                num += 1
            pos -= 1
        return s
                    
    def backspaceCompare(self, S: str, T: str) -> bool:
        s = self.convert(S)
        t = self.convert(T)
        if(len(s) != len(t)):
            return False
        else:
            for i in range(0, len(s)):
                if(s[i] != t[i]):
                    return False
            return True

上面是第一版的代码,我们发现在删除操作的时候,遍历了S,T字符串一次,然后在比较删除后的字符串是否相等的时候,又遍历了一次,所以总共遍历了两次,时间复杂度有点拉跨。

python类中写function一定要写seft参数,调用的时候也要使用self.function,老是容易忘

猜你喜欢

转载自blog.csdn.net/SJTUKK/article/details/109156060