722. 刪除注釋

722. 刪除注釋

給一個 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].
  • 每個塊注釋都會被閉合。
  • 給定的源碼中不會有單引號、雙引號或其他控制字符。

解題思路

  1. 處理//注釋,只需要把改行后面的字符全部刪除
  2. 當遇到/*,我們設定一個標記位mutiRowDel=true,只要還沒遇到 */,就不處理任何字符

細節:[“a/comment", “line”, "more_comment/b”] 如果出現這種情況,塊注釋會把換行也刪除掉,所以我們需要把塊注釋起始行和結束行里面的字符結合為一行

代碼

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;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何創建一個自記錄的Makefile

My new favorite way to completely underuse a Makefile? Creating personalized, per-project repository workflow command aliases that you can check in.我最喜歡的完全沒用Makefile的方法&#xff1f; 創建個性化的按項目存儲庫工作流命令別名&#xff0c;您可以檢入。…

【BZOJ3262】陌上花開

CDQ分治模板 注意三元組完全相等的情況 1 #include<bits/stdc.h>2 using namespace std;3 const int N100010,K200010;4 int n,k,cnt[N],ans[N];5 struct Node{6 int a,b,c,id;7 bool operator<(const Node& k)const{8 if(bk.b&&ck.c) re…

Spring+jpaNo transactional EntityManager available

2019獨角獸企業重金招聘Python工程師標準>>> TransactionRequiredException: No transactional EntityManager availableEntityManager執行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事務if (transactionRequiringMethods.cont…

python項目構建_通過構建4個項目來學習Python網絡

python項目構建The Python programming language is very capable when it comes to networking. Weve released a crash course on the freeCodeCamp.org YouTube channel that will help you learn the basics of networking in Python.當涉及到網絡時&#xff0c;Python編程…

164. 最大間距

164. 最大間距 給定一個無序的數組&#xff0c;找出數組在排序之后&#xff0c;相鄰元素之間最大的差值。 如果數組元素個數小于 2&#xff0c;則返回 0。 示例 1: 輸入: [3,6,9,1] 輸出: 3 解釋: 排序后的數組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差…

10.32/10.33 rsync通過服務同步 10.34 linux系統日志 screen工具

通過后臺服務的方式在遠程主機上建立一個rsync的服務器&#xff0c;在服務器上配置好rsync的各種應用&#xff0c;然后將本機作為rsync的一個客戶端連接遠程的rsync服務器。在128主機上建立并配置rsync的配置文件/etc/rsyncd.conf,把你的rsyncd.conf編輯成以下內容&#xff1a;…

01_Struts2概述及環境搭建

1.Struts2概述&#xff1a;Struts2是一個用來開發MVC應用程序的框架。Struts2提供了web應用程序開發過程中一些常見問題的解決方案;對用戶輸入的數據進行合法性驗證統一的布局可擴展性國際化和本地化支持Ajax表單的重復提交文件的上傳和下載... ...2.Struts2相對于Struts1的優勢…

315. 計算右側小于當前元素的個數

315. 計算右側小于當前元素的個數 給定一個整數數組 nums&#xff0c;按要求返回一個新數組 counts。數組 counts 有該性質&#xff1a; counts[i] 的值是 nums[i] 右側小于 nums[i] 的元素的數量。 示例&#xff1a; 輸入&#xff1a;nums [5,2,6,1] 輸出&#xff1a;[2,1…

IOS上傳文件給java服務器,返回報錯unacceptable context-type:text/plain

IOS上傳文件給java服務器&#xff0c;返回報錯unacceptable context-type&#xff1a;text/plain response返回類型不對 RequestMapping(value "uploadMultiFiles", method RequestMethod.POST, produces"application/json;charsetUTF-8") 使用produces指…

Python爬蟲框架Scrapy學習筆記原創

字號scrapy [TOC] 開始 scrapy安裝 首先手動安裝windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip install Twisted-18.4.0-cp36-cp36m-win_amd64.whl 安裝scrapy pip install -i https://pypi.douban.com/simple/ scrapy windows系統額外需要…

600. 不含連續1的非負整數

600. 不含連續1的非負整數 給定一個正整數 n&#xff0c;找出小于或等于 n 的非負整數中&#xff0c;其二進制表示不包含 連續的1 的個數。 示例 1:輸入: 5 輸出: 5 解釋: 下面是帶有相應二進制表示的非負整數< 5&#xff1a; 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101…

高可用性、負載均衡的mysql集群解決方案

2019獨角獸企業重金招聘Python工程師標準>>> 一、為什么需要mysql集群&#xff1f; 一個龐大的分布式系統的性能瓶頸中&#xff0c;最脆弱的就是連接。連接有兩個&#xff0c;一個是客戶端與后端的連接&#xff0c;另一個是后端與數據庫的連接。簡單如圖下兩個藍色框…

Django的model查詢操作 與 查詢性能優化

Django的model查詢操作 與 查詢性能優化 1 如何 在做ORM查詢時 查看SQl的執行情況 (1) 最底層的 django.db.connection 在 django shell 中使用 python manage.py shell>>> from django.db import connection >>> Books.objects.all() >>> connect…

887. 雞蛋掉落

887. 雞蛋掉落 給你 k 枚相同的雞蛋&#xff0c;并可以使用一棟從第 1 層到第 n 層共有 n 層樓的建筑。 已知存在樓層 f &#xff0c;滿足 0 < f < n &#xff0c;任何從 高于 f 的樓層落下的雞蛋都會碎&#xff0c;從 f 樓層或比它低的樓層落下的雞蛋都不會破。 每次…

678. 有效的括號字符串

678. 有效的括號字符串 給定一個只包含三種字符的字符串&#xff1a;&#xff08; &#xff0c;&#xff09; 和 *&#xff0c;寫一個函數來檢驗這個字符串是否為有效字符串。有效字符串具有如下規則&#xff1a; 任何左括號 ( 必須有相應的右括號 )。任何右括號 ) 必須有相應…

Faster R-CNN代碼例子

主要參考文章&#xff1a;1&#xff0c;從編程實現角度學習Faster R-CNN&#xff08;附極簡實現&#xff09; 經常是做到一半發現收斂情況不理想&#xff0c;然后又回去看看這篇文章的細節。 另外兩篇&#xff1a; 2&#xff0c;Faster R-CNN學習總結 這個主要是解釋了18,…

剝開比原看代碼09:通過dashboard創建密鑰時,前端的數據是如何傳到后端的?

2019獨角獸企業重金招聘Python工程師標準>>> 作者&#xff1a;freewind 比原項目倉庫&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我們粗略的研究…

面試題 17.24. 最大子矩陣

面試題 17.24. 最大子矩陣 給定一個正整數、負整數和 0 組成的 N M 矩陣&#xff0c;編寫代碼找出元素總和最大的子矩陣。 返回一個數組 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分別代表子矩陣左上角的行號和列號&#xff0c;r2, c2 分別代表右下角的行號和列號。若有多個…

js模擬form表單提交數據, js模擬a標簽點擊跳轉,避開使用window.open引起來的瀏覽器阻止問題...

js模擬form表單提交數據, js模擬a標簽點擊跳轉&#xff0c;避開使用window.open引起來的瀏覽器阻止問題 js模擬form表單提交數據源碼&#xff1a; /** * js模擬form表單提交 * param {object} 參數對象 * url 必填 提交地址 * methond 選填 默認post 提交方…

004. ES6之函數的擴展

2019獨角獸企業重金招聘Python工程師標準>>> 1. 函數參數的默認值 ES6 允許為函數的參數設置默認值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 參數變量…