【Leetcode周赛】No.184 解题记录

【Leetcode周赛】No.184 解题记录

    • No.5380 数组中的字符串匹配
    • No.5381 查询带键的排列
    • No.5382 HTML试题解析器
    • No.5383 给 N x 3 网格图涂色的方案数

本次竞赛虽然进步了,但是也很可惜——第3题没有在规定时间内做完,所以最终得分只算了2题,不过毕竟有半年没打了,前面的题平均20min还是用时太长了(我做完一题时大佬们早就结束比赛了),过程中也总是查C++API文档,说明自己还是不熟练,所以以后得好好研究下C++STL模板库。
【Leetcode周赛】No.184 解题记录_第1张图片
【Leetcode周赛】No.184 解题记录_第2张图片

No.5380 数组中的字符串匹配

【Leetcode周赛】No.184 解题记录_第3张图片
暴力

class Solution {
public:
    vector<string> stringMatching(vector<string>& words) {
        vector<string> ret;
        int flag;
        for(int i=0;i<words.size();i++){
            flag=0;
            for(int j=0;j<words.size()&&!flag;j++){
                if(words[i]!=words[j]&&words[i].length()<words[j].length()){
                    if(words[j].find(words[i],0)!=string::npos){
                        ret.push_back(words[i]);
                        flag=1;
                    }
                        
                }
            }
        }
        return ret;
    }
};

No.5381 查询带键的排列

【Leetcode周赛】No.184 解题记录_第4张图片
【Leetcode周赛】No.184 解题记录_第5张图片
用容器暴力模拟

class Solution {
public:
    int find(vector<int> v,int key){
        for(int i=0;i<v.size();i++){
            if(v[i]==key){
                return i;
            }
        }
        return -1;
    }
    vector<int> processQueries(vector<int>& queries, int m) {
        vector<int> ret,v(m);
        for(int i=0;i<m;i++){
            v[i]=i+1;//P
        }
        for(int i=0;i<queries.size();i++){
            int tmp=queries[i];
            int pos=find(v,tmp);
            ret.push_back(pos);
            v.erase(v.begin()+pos);
            v.insert(v.begin(),tmp);
        }
        return ret;
    }
};

No.5382 HTML试题解析器

【Leetcode周赛】No.184 解题记录_第6张图片【Leetcode周赛】No.184 解题记录_第7张图片
用map存储符号的映射,使用字符串的模板函数replace()、substr()等等进行过程模拟即可。

class Solution {
public:
    map<string, string> m;
    void init(){
        m["""]="\"";
        m["&"]="&";
        m["'"]="\'";
        m[">"]=">";
        m["<"]="<";
        m["⁄"]="/";
        
    }
    string entityParser(string text) {
        init();
        int i=0;
        int size=text.length();
        string ret=text;
        string str;
        int sum=0;
        while(i<size){
            if(text[i]=='&'){
                int start,end;
                start=i;
                do{
                    i++;
                }while(i<size&&text[i]!=';');
               if(i<size){
                    end=i;
                    string s=text.substr(start,end-start+1);
                    if(m.find(s)!=m.end()){
                        str=m[s];
                        ret.replace(start-sum,s.length(),str,0,str.length());
                        sum+=s.length()-1;
                    }
                }
            }
            i++;
        }      
        return ret;
    }
};

No.5383 给 N x 3 网格图涂色的方案数

【Leetcode周赛】No.184 解题记录_第8张图片
【Leetcode周赛】No.184 解题记录_第9张图片
暂未做

你可能感兴趣的:(#,Leetcode,#,C++)