. - 力扣(LeetCode)

想着和3174.clearDigits一样做,由于提交时候由于递归的内存使用问题AC不了。下面是使用递归的代码,理论上应该是没问题的。时间超时解决了,内存还是超出了。

class Solution:
	def removeStars(self, s: str) -> str:
		def remove(my_str: str, index: int) -> str:
			while index < len(my_str):
				if my_str[index] == '*':
					new_str = my_str[:index - 1] + my_str[index + 1:]
					index -= 1
					return remove(new_str, index)
				index += 1
			return my_str
		return remove(s, 0)

直接根据最简单的题意去写:

class Solution:
	def removeStars(self, s: str) -> str:
		i, n = 0, len(s)
		while i < n:
			if s[i] == '*':
				s = s[:i - 1] + s[i + 1:]
				i -= 1
				n -= 2
			else:
				i += 1
		return s

根据栈去维护:

class Solution:
	# 官方的参考答案还是非常巧妙的使用栈维护,构建新的字符串
	def removeStars(self, s: str) -> str:
		res = []
		for c in s:
			if c != '*':
				res.append(c)
			elif res:
				res.pop()
		return ''.join(res)