当前位置: 首页 > news >正文

大都会app官网下载西安搜索引擎优化

大都会app官网下载,西安搜索引擎优化,网站建设企业邮箱,影视网站模板题目链接 722. 删除注释 标签 字符串 步骤 Step1. 先将source合并为一个字符串进行处理,中间补上’\n’,方便后续确定注释开始、结束位置。 string combined; for (auto str : source) {combined str "\n"; }Step2. 定义数组 toDel&am…

题目链接

722. 删除注释

标签

字符串

步骤

Step1. 先将source合并为一个字符串进行处理,中间补上’\n’,方便后续确定注释开始、结束位置。

string combined;
for (auto str : source) {combined += str + "\n";
}

Step2. 定义数组 toDel,记录每一个注释开始、结束的位置;进行状态转移。对于 /**/ 类型的注释的结束符 */,如果匹配失败,则需要回退一位。

状态转移表示如下:

s0: if /: goto s1 # match /, change to s1else: goto s0
s1: if /: cut down this line, goto s0 # match //elif *: goto s2 # match /*else: goto s0 # match failed, return to s1
s2: if *: goto s3 # match * in comment; s2 means that the current state is InCommentelse: goto s2
s3: if /: end this comment, goto s0 # match */else: goto s3  # match failed, return to s2

具体的代码部分如下:

for (int i = 0; i < len; i++) {char ch = combined[i];switch (state) {case 0:if (ch == '/') {state = 1;} else {state = 0;}break;case 1:if (ch == '/') { // 出现//,删去此行之后的内容// 找到从当前下标开始的第一个\n,下一次遍历从其之后开始int end = combined.find("\n", i);cmtBegin = i - 1;cmtEnd = end - 1;toDel.push_back({cmtBegin, cmtEnd});state = 0;i = end;} else if (ch == '*') { // 出现/*state = 2;cmtBegin = i - 1;} else {state = 0;}break;case 2:if (ch == '*') {state = 3;} else {state = 2;}break;case 3:if (ch == '/') { // cmtEndstate = 0;cmtEnd = i;toDel.push_back({cmtBegin, cmtEnd});} else { // 匹配*/失败,回退一位state = 2;i--;}break;} 
}

Step3. 遍历 toDel,得到不含注释的中间结果 tmpAns

// 遍历toDel,得到删除注释的中间结果
string tmpAns;
int last = 0;
for (auto p : toDel) {// 下标a和b-1之间的长度:b-atmpAns += combined.substr(last, p.first - last);last = p.second + 1;
}
// 分为toDel.size()+1段的最后一段
tmpAns += combined.substr(last, combined.length() - last);

Step4. 根据 \n 来分割 tmpAns 即可。

vector<string> ans;
int pos = tmpAns.find("\n", 0);
while (pos != string::npos) {if (pos != 0) {ans.push_back(tmpAns.substr(0, pos));}tmpAns.erase(0, pos+1);pos = tmpAns.find("\n", 0);
}

实现代码(C++)

class Solution {
public:vector<string> removeComments(vector<string>& source) {int state = 0;// 合并为一个字符串string combined;for (auto str : source) {combined += str + "\n";}vector<pair<int,int>> toDel;int len = combined.length();int cmtBegin = -1, cmtEnd = -1;for (int i = 0; i < len; i++) {char ch = combined[i];switch (state) {case 0:if (ch == '/') {state = 1;} else {state = 0;}break;case 1:if (ch == '/') { // 出现//,删去此行之后的内容// 找到从当前下标开始的第一个\n,下一次遍历从其之后开始int end = combined.find("\n", i);cmtBegin = i - 1;cmtEnd = end - 1;toDel.push_back({cmtBegin, cmtEnd});state = 0;i = end;} else if (ch == '*') { // 出现/*state = 2;cmtBegin = i - 1;} else {state = 0;}break;case 2:if (ch == '*') {state = 3;} else {state = 2;}break;case 3:if (ch == '/') { // cmtEndstate = 0;cmtEnd = i;toDel.push_back({cmtBegin, cmtEnd});} else { // 匹配*/失败,回退一位state = 2;i--;}break;} }// 遍历toDel,得到删除注释的中间结果string tmpAns;int last = 0;for (auto p : toDel) {tmpAns += combined.substr(last, p.first - last);last = p.second + 1;}tmpAns += combined.substr(last, combined.length() - last);// 根据\n分割vector<string> ans;int pos = tmpAns.find("\n", 0);while (pos != string::npos) {if (pos != 0) {ans.push_back(tmpAns.substr(0, pos));}tmpAns.erase(0, pos+1);pos = tmpAns.find("\n", 0);}return ans;}
};
http://www.dt0577.cn/news/2579.html

相关文章:

  • e龙岩服务平台seo的概念
  • 公司网站备案需要哪些百度竞价seo排名
  • 微信公众号可以做微网站百度品牌专区
  • 深圳 网站建设 销售爱站网长尾关键词挖掘工具福利片
  • 台州网站排名优化国外搜索引擎入口
  • 企业宣传手册模板免费谷歌seo关键词排名优化
  • 小程序商城多少钱seo排名是什么意思
  • 网站制作策划书自然搜索优化
  • 产品宣传网站的作用百度推广视频
  • wordpress 一站多主题湛江今日头条新闻
  • 响应式网站建设哪里有seo优化的方法有哪些
  • 最好旅游网站建设信息流广告投放工作内容
  • 站长之家网址ip查询石家庄网站建设
  • 网站快捷导航ie怎么做全球疫情今天最新消息
  • 网站设计模版网络营销推广平台有哪些
  • 怎么优化网站代码上海最近3天疫情情况
  • 企业网站的建设毕业论文关键词搜索网站
  • 湛艺建设集团网站快速网站推广公司
  • 公司网站制作流程2016seo网课培训
  • 郑州企业网站推广外包google网页版登录入口
  • 玛丁图商城网站开发镇江百度推广公司
  • 江门专业网站制作费用海外网络推广方案
  • 韶关市住房和城乡建设局网站网络推广平台大全
  • 网站图片文字排版错误百度云搜索引擎入口盘多多
  • 成都网站推广找四川冠辰宁波seo网页怎么优化
  • 江门网站建设公司百度云账号登录
  • 合肥网站建设制作seo排名优化app
  • 给别人做网站必须有icp杭州seo优化
  • 大渡口网站建设哪家好seo索引擎优化
  • 带平台的房子装修图片大全seo是指什么岗位