lintcode-1902 · 寻找Google

239 阅读1分钟

描述

给您一个字符串形式的C ++文件(每行是一个字符串),我们希望您在注释行中找到“ Google”。如果注释行中有“ Google”,则返回true,否则返回false。 C++有两种注释方式,一种是单行注释 //,代表着//后面的本行内容均为注释,另一种是多行注释,/* */ 这两者之间的部分均为注释。

**

  • 保证“Google”字符串在一个string内,不会换行

样例

输入: 
S = ["#include<bits/stdc++.h>","using namespace std;","//Google test","int main(){","return 0;","}"]
输出: 
true
输入: 
S = ["#include<bits/stdc++.h>","using namespace std;","int main(){","int Google = 0","return 0;","}"]
输出: 
false
说明: 
google不在注释行内。

题解

解题思路

根据题意,Google可能会出现在单行和多行注释内,这两种注释在C++中都是合理合规的。 所以我们主要考虑下面几种情况

  1. "Google" 主要是出现在“//”之后的,说明它就是一个注释,直接返回true即可

  2. "Google" 出现在"/ "之后与" /"之间的,说明它是一个注释,直接返回true即可

3、"Google"出现在只有"/ "而没有" /"的"/ *"之后,虽然没有后面的,也是注释,返回true

4、"Google"出现在只有"* /"而没有"/ "的" /"之前,虽然没有后面的,也是注释,返回true

5、其他情况:返回false


class Solution {
public:
    /**
     * @param S: The c++ file
     * @return: return if there is "Google" in commet line
     */
    bool FindGoogle(vector<string> &S) {
        
        //1、某行在//之后包含"Google"
        //2、某行在包含/*或以/*开头、*/结尾的之间且包含"Google"
        bool batchedAnnotation=false;
        for(int i = 0; i < S.size(); i++){
            if(S[i].find("//") != S[i].npos && S[i].find("Google")!= S[i].npos && S[i].find("//") < S[i].find("Google")){
                return true;
            }
            if(S[i].find("/*")!=S[i].npos && S[i].find("*/")!=S[i].npos){
                if(S[i].find("Google")!=S[i].npos){
                    return true;
                }
            }
            else if(S[i].find("/*")!=S[i].npos && S[i].find("*/")==S[i].npos && S[i].find("Google")!=S[i].npos && S[i].find("/*") < S[i].find("Google")){
                return true;
            }
            else if(S[i].find("/*")==S[i].npos && S[i].find("*/")!=S[i].npos && S[i].find("Google")!=S[i].npos && S[i].find("*/") > S[i].find("Google")){
                return true;
            }
        }
        return false;
    }
};