美文网首页算法
722. 删除注释

722. 删除注释

作者: 红树_ | 来源:发表于2023-08-08 16:55 被阅读0次

    做我们自己,并成为我们所能成为的人,是人生唯一的目的。

    题目

    参考722. 删除注释

    解题思路

    • 模拟:遍历枚举字符时,需要判断连续的几个字符确定是否进入注释,以块注释作为主要判断入口,单行注释辅助忽略后面字符,每一行需要结合起来判断:
      • 未进入块注释:碰到单行注释忽略后面字符开始新行,否则加入新行存储。
      • 进入块注释:跳过该字符,直到遇到块注释结束。

    记录上一个字符,当前行结束判断不为空则生成的新行添加到结果队列中。

    模拟

    class Solution {
        public List<String> removeComments(String[] source) {
            List<String> ans = new ArrayList<>();  // 模拟
            boolean comment = false;// 是否是块注释部分
            StringBuilder sb = new StringBuilder();  // 遍历每行字符 生成新行
            //char pre = 0;// 前一个字符值 \u0000 使用sb最后一个字符代替
            char commentPre = 0;// 注释中的前一个字符值
            for (String s : source) {
                char[] sc = s.toCharArray();
                for (int i = 0; i < sc.length; i++) {
                    char c = sc[i], pre = sb.length()==0? 0:sb.charAt(sb.length()-1);
                    if (!comment) {
                        if (pre == '/' && c == '/') { //清除单行注释
                            sb.deleteCharAt(sb.length()-1);
                            break;
                        } else if (pre == '/' && c == '*') { //进入块注释
                            comment = true;
                            sb.deleteCharAt(sb.length()-1);
                        } else sb.append(c); // 不为注释记录字符
                    } else {
                        if(commentPre == '*' && c == '/') { // 解除块注释
                            comment = false;
                            commentPre = 0;
                        }else {
                            commentPre = c;
                        }
                    }
                }
                if (!comment && sb.length() > 0){ // 不在注释中且不为空加入答案 同时清除栈
                    ans.add(sb.toString());
                    sb.delete(0,sb.length());
                } 
            }
            return ans;
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n),遍历所有代码字符一次,n为总字符数。
    • 空间复杂度:O(n)

    相关文章

      网友评论

        本文标题:722. 删除注释

        本文链接:https://www.haomeiwen.com/subject/hkonpdtx.html