LeetCode0722 刪除注釋

2021-10-03 10:07:56 字數 2349 閱讀 8534

給乙個 c++ 程式,刪除程式中的注釋。這個程式source是乙個陣列,其中source[i]表示第i行原始碼。 這表示每行原始碼由\n分隔。

在 c++ 中有兩種注釋風格,行內注釋和塊注釋。

字串//表示行注釋,表示//和其右側的其餘字元應該被忽略。

字串/*表示乙個塊注釋,它表示直到*/的下乙個(非重疊)出現的所有字元都應該被忽略。(閱讀順序為從左到右)非重疊是指,字串/*/並沒有結束塊注釋,因為注釋的結尾與開頭相重疊。

第乙個有效注釋優先於其他注釋:如果字串//出現在塊注釋中會被忽略。 同樣,如果字串/*出現在行或塊注釋中也會被忽略。

如果一行在刪除注釋之後變為空字串,那麼不要輸出該行。即,答案列表中的每個字串都是非空的。

樣例中沒有控制字元,單引號或雙引號字元。比如,source = "string s = "/* not a comment. */";" 不會出現在測試樣例裡。(此外,沒有其他內容(如定義或巨集)會干擾注釋。)

我們保證每乙個塊注釋最終都會被閉合, 所以在行或塊注釋之外的/*總是開始新的注釋。

最後,隱式換行符可以通過塊注釋刪除。 有關詳細資訊,請參閱下面的示例。

從源**中刪除注釋後,需要以相同的格式返回源**。

示例 1:

輸入:

source = ["/*test program /", 「int main()」, "」]

示例**可以編排成這樣:

/*test program /

int main()

輸出: [「int main()」,""]

編排後:

int main()

解釋:第 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].

每個塊注釋都會被閉合。

給定的原始碼中不會有單引號、雙引號或其他控制字元。

開始時,可以直接按字元來逐個處理,由於塊注釋是多行注釋,所以一旦之前有了塊注釋的起始符,當前行的處理方式就不同了,所以需要乙個變數blocked來記錄當前是否為塊注釋狀態,初始化為false;

其次,建立空字元out,用來儲存去除注釋後的字元,開始遍歷整個**的每一行,遍歷每一行中的每乙個字元,若當前字元是最後乙個字元,說明不會再有注釋了,將當前字元加入out中,否則取出當前位置和下乙個位置的兩個字元,如果其正好是"/*",說明之後的部分都是塊注釋了,我們將blocked賦值為true,然後指標向後移動乙個,明明兩個字元,為啥只移動乙個呢?因為另乙個可以在for迴圈中的++i移動;

再次,如果當前兩個字元正好是"//",說明當前行之後都是注釋,我們並不care後面有啥,所以可以直接break掉當前行;如果都不是,說明當前字元是**,將其加入out中;

最後,來看看blockedtrue的情況,說明之後的內容都是塊注釋的內容,此處唯一關心的是有沒有結束符"*/",所以還是先做判斷,如果當前不是最後乙個字元,說明至少還有兩個字元,然後取出兩個字元,如果正好是塊注釋結束符,那麼我們將標識重置為false,指標要後移動乙個。若當前行遍歷完後,如果out不為空,且blockedfalse,則將out存入結果res中。

class

solution

}else}}

if(!out.

empty()

&&!blocked)

}return res;}}

;

Oacle刪除後註刪表及其殘留刪除

1.關閉oracle所有的服務。可以在windows的服務管理器中關閉 2.開啟登錄檔 regedit 開啟路徑 hkey local machine system currentcontrolset services 刪除該路徑下的所有以oracle開始的服務名稱,這個鍵是標識oracle在win...

記事狗盲注及任意檔案刪除

0x1 盲注 0x2 任意檔案刪除 0x1 盲注 在modules ajax topic.mod.php中 function group fields and gid g id query this databasehandler query sql fields info query getrow...

LeetCode 刪除重複項

使用vector.size 時,在for迴圈中要寫i不要寫i。因為當vector的size為0時,size 函式返回值是無符號整型,這時vec.size 1是乙個正數,會導致 vec i 訪問越界。題解 首先考慮了暴力解法,兩個迴圈尋找相等的元素,找到後將其就地改為 1,記錄下個數。再一次迴圈把不是...