722. 删除注释
722. 刪除注釋
給一個(gè) C++ 程序,刪除程序中的注釋。這個(gè)程序source是一個(gè)數(shù)組,其中source[i]表示第i行源碼。 這表示每行源碼由\n分隔。
在 C++ 中有兩種注釋風(fēng)格,行內(nèi)注釋和塊注釋。
字符串// 表示行注釋,表示//和其右側(cè)的其余字符應(yīng)該被忽略。
字符串/* 表示一個(gè)塊注釋,它表示直到*/的下一個(gè)(非重疊)出現(xiàn)的所有字符都應(yīng)該被忽略。(閱讀順序?yàn)閺淖蟮接?#xff09;非重疊是指,字符串/*/并沒有結(jié)束塊注釋,因?yàn)樽⑨尩慕Y(jié)尾與開頭相重疊。
第一個(gè)有效注釋優(yōu)先于其他注釋:如果字符串//出現(xiàn)在塊注釋中會(huì)被忽略。 同樣,如果字符串/*出現(xiàn)在行或塊注釋中也會(huì)被忽略。
如果一行在刪除注釋之后變?yōu)榭兆址?#xff0c;那么不要輸出該行。即,答案列表中的每個(gè)字符串都是非空的。
樣例中沒有控制字符,單引號(hào)或雙引號(hào)字符。比如,source = “string s = “/* Not a comment. */”;” 不會(huì)出現(xiàn)在測試樣例里。(此外,沒有其他內(nèi)容(如定義或宏)會(huì)干擾注釋。)
我們保證每一個(gè)塊注釋最終都會(huì)被閉合, 所以在行或塊注釋之外的/*總是開始新的注釋。
最后,隱式換行符可以通過塊注釋刪除。 有關(guān)詳細(xì)信息,請參閱下面的示例。
從源代碼中刪除注釋后,需要以相同的格式返回源代碼。
示例 1:輸入: source = ["/*Test program */", "int main()", "{ ", " // variable declaration ", "int a, b, c;", "/* This is a test", " multiline ", " comment for ", " testing */", "a = b + c;", "}"]示例代碼可以編排成這樣: /*Test program */ int main() { // variable declaration int a, b, c; /* This is a testmultiline comment for testing */ a = b + c; }輸出: ["int main()","{ "," ","int a, b, c;","a = b + c;","}"]編排后: int main() { int a, b, c; a = b + c; }解釋: 第 1 行和第 6-9 行的字符串 /* 表示塊注釋。第 4 行的字符串 // 表示行注釋。 示例 2:輸入: source = ["a/*comment", "line", "more_comment*/b"] 輸出: ["ab"] 解釋: 原始的 source 字符串是 "a/*comment\nline\nmore_comment*/b", 其中我們用粗體顯示了換行符。刪除注釋后,隱含的換行符被刪除,留下字符串 "ab" 用換行符分隔成數(shù)組時(shí)就是 ["ab"]. 注意:- source的長度范圍為[1, 100].
- source[i]的長度范圍為[0, 80].
- 每個(gè)塊注釋都會(huì)被閉合。
- 給定的源碼中不會(huì)有單引號(hào)、雙引號(hào)或其他控制字符。
解題思路
細(xì)節(jié):[“a/comment", “l(fā)ine”, "more_comment/b”] 如果出現(xiàn)這種情況,塊注釋會(huì)把換行也刪除掉,所以我們需要把塊注釋起始行和結(jié)束行里面的字符結(jié)合為一行
代碼
class Solution {public List<String> removeComments(String[] source) {boolean rowDel=false,mutiRowDel=false;List<String> list=new ArrayList<>();for(String s:source){boolean old=mutiRowDel;StringBuilder sb=new StringBuilder();for(int i=0;i<s.length();i++){if(i+1<s.length()&&mutiRowDel&&s.charAt(i)=='*'&&s.charAt(i+1)=='/'){i++;mutiRowDel=false;continue;}if(mutiRowDel) continue;if(i+1<s.length()&&s.charAt(i)=='/'&&s.charAt(i+1)=='*'){i++;mutiRowDel=true;continue;} if(i+1<s.length()&&s.charAt(i)=='/'&&s.charAt(i+1)=='/')break;sb.append(s.charAt(i));}if(sb.length()!=0){if(old){String t=list.remove(list.size()-1);list.add(t+sb.toString());}else list.add(sb.toString()); }}return list;} }總結(jié)
- 上一篇: 49. 字母异位词分组
- 下一篇: 164. 最大间距