LeetCode 722. CPP删除注释(逻辑题)
1. 題目
給一個 C++ 程序,刪除程序中的注釋。這個程序source是一個數組,其中source[i]表示第i行源碼。 這表示每行源碼由\n分隔。
在 C++ 中有兩種注釋風格,行內注釋和塊注釋。
字符串// 表示行注釋,表示//和其右側的其余字符應該被忽略。
字符串/* 表示一個塊注釋,它表示直到*/的下一個(非重疊)出現的所有字符都應該被忽略。(閱讀順序為從左到右)非重疊是指,字符串/*/并沒有結束塊注釋,因為注釋的結尾與開頭相重疊。
第一個有效注釋優先于其他注釋:如果字符串//出現在塊注釋中會被忽略。 同樣,如果字符串/*出現在行或塊注釋中也會被忽略。
如果一行在刪除注釋之后變為空字符串,那么不要輸出該行。即,答案列表中的每個字符串都是非空的。
樣例中沒有控制字符,單引號或雙引號字符。比如,source = “string s = “/* Not a comment. */”;” 不會出現在測試樣例里。(此外,沒有其他內容(如定義或宏)會干擾注釋。)
我們保證每一個塊注釋最終都會被閉合, 所以在行或塊注釋之外的/*總是開始新的注釋。
最后,隱式換行符可以通過塊注釋刪除。 有關詳細信息,請參閱下面的示例。
從源代碼中刪除注釋后,需要以相同的格式返回源代碼。
示例 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" 用換行符分隔成數組時就是 ["ab"].注意: source的長度范圍為[1, 100]. source[i]的長度范圍為[0, 80]. 每個塊注釋都會被閉合。 給定的源碼中不會有單引號、雙引號或其他控制字符。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-comments
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 注意多行注釋塊前后字符需要拼接在一行
總結
以上是生活随笔為你收集整理的LeetCode 722. CPP删除注释(逻辑题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 501. 二叉搜索树中
- 下一篇: LeetCode 209. 长度最小的子