题目:原题链接(中等)
标签:字符串
解法  | 时间复杂度  | 空间复杂度  | 执行用时  | 
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







