题目:​​原题链接​(中等)

标签:字符串

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

O(N)

O(1)

40ms (72.56%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

class Solution:
def removeComments(self, source: List[str]) -> List[str]:
removing = False # 是否在被多行屏蔽的情况下
ans = []
idx = 0
in_line = False
while idx < len(source):
line = source[idx] # 读取当前行信息
if removing:
if "*/" in line:
removing = False
source[idx] = line[line.index("*/") + 2:]
else:
idx += 1
else:
N = len(line)
idx_1 = line.index("//") if "//" in line else N
idx_2 = line.index("/*") if "/*" in line else N
if idx_1 < idx_2 and "//" in line:
if in_line and ans:
content = ans.pop() + line[:line.index("//")]
in_line = False
else:
content = line[:line.index("//")]
if content:
ans.append(content)
idx += 1
elif idx_1 > idx_2:
if in_line and ans:
ans.append(ans.pop() + line[:line.index("/*")])
else:
ans.append(line[:line.index("/*")])
source[idx] = line[line.index("/*") + 2:]
removing = True
in_line = True
else:
if in_line and ans:
content = ans.pop() + line
in_line = False
else:
content = line
if content:
ans.append(content)
idx += 1
return ans

解法二(整理解法一代码):

class Solution:
def removeComments(self, source: List[str]) -> List[str]:
is_block = False # 是否在被多行屏蔽的情况下
in_line = False # 当前是否换行

ans = []

idx = 0
while idx < len(source):
line = source[idx] # 读取当前行信息

if is_block: # 处理当前正在多行屏蔽的情况下
if "*/" in line:
is_block = False
source[idx] = line[line.index("*/") + 2:]
else:
idx += 1
else:
content = ans.pop() if in_line and ans else "" # 当前行结果

idx_1 = line.index("//") if "//" in line else float("inf")
idx_2 = line.index("/*") if "/*" in line else float("inf")

if idx_1 < idx_2:
in_line = False
content += line[:line.index("//")]
if content:
ans.append(content)
idx += 1
elif idx_1 > idx_2:
is_block, in_line = True, True
ans.append(content + line[:line.index("/*")])
source[idx] = line[line.index("/*") + 2:]
else:
in_line = False
content += line
if content:
ans.append(content)
idx += 1
return ans