算法

722. 删除注释

2023-08-08  本文已影响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;
    }
}

复杂度分析

上一篇 下一篇

猜你喜欢

热点阅读