zoukankan      html  css  js  c++  java
  • LeetCode 周赛 184

    第一题

    判断字符串是不是子串,效率高的方式应该是字典树,按照字典序排序后,建树,再建的过程中就可以得到答案。
    但是这是比赛中,又是第一题,所以直接用contains了

    c#

    public class Solution {
        public IList<string> StringMatching(string[] words) {
            
            IList<string> ans = new List<string>();
            
            for(int i=0;i<words.Length;i++)
            {
                for(int j=0;j<words.Length;j++)
                {
                    if(i==j)
                        continue;
                    if(words[j].Contains(words[i]))
                    {
                        ans.Add(words[i]);
                        break;
                    }
                }
            }
            
            return ans;
            
        }
    }
    

    第二题
    数组长度只有1000,每次调换位置都可以暴力的更新其他数字的位置

    
        
    class Solution {
    public:
        int p[1005];
        int s[1005];
        vector<int> processQueries(vector<int>& queries, int m) {
            
            for(int i=1;i<=m;i++)
            {
                p[i-1]=i;
                s[i]=i-1;
            }
            
            vector<int> ans;
            for(int i=0;i<queries.size();i++)
            {
                int x = queries[i];
                ans.push_back(s[x]);
                
                int y = s[x];
                for(int j=0;j<y;j++)
                {
                    s[p[j]]++;
                }
                for(int j=y;j>0;j--)
                {
                    p[j]=p[j-1];
                }
                s[x]=0;
                p[0]=x; 
            }
            return ans;
               
        }
    };
    

    第三题
    很简单的一道字符串替换的题目

    class Solution {
    public:
        string entityParser(string text) {
            
            string ans="";
            
            int tag=0;
            string s="";
            for(int i=0;i<text.length();i++)
            {
                if(!tag&&text[i]=='&')
                {
                    tag=1;
                    continue;
                }
                if(tag&&text[i]==';')
                {
                    if(s=="quot")
                    {
                        //ans+=92;
                        ans+='"';
                    }
                    else if(s=="apos")
                    {
                        ans+="'";
                    }
                    else if(s=="amp")
                    {
                        ans+="&";
                    }
                    else if (s=="gt")
                    {
                        ans+=">";
                    }
                    else if(s=="lt")
                    {
                        ans+="<";
                    }
                    else if(s=="frasl")
                    {
                        ans+="/";
                    }
                    else
                    {
                        ans+="&";
                        ans+=s;
                        ans+=";";
                    }
                    tag=0;
                    s="";
                    continue;
                }
                
                if(!tag)
                    ans+=text[i];
                else
                {
                    s+=text[i];
                }
            }
            
            return ans;
            
        }
    };
    

    第四题
    测试样例中给了一个很重要的样例,就是n=1的时候,一共有12种情况。对于所有的n都是这个12中情况中的组合。我们把上下不能组合的情况找到。利用递推关系很容就可以得到答案。

    const int mod=1e9+7;
    class Solution {
    public:
        int b[12][3];
        vector<int> d[12];
        int c[3];
        int pos=0;
        int a[5005][12];
        int numOfWays(int n) {
            
            dfs(0);
            for(int i=0;i<12;i++)
            {
                for(int j=0;j<12;j++)
                {
                    if(i==j) continue;
                    int tag=0;
                    for(int k=0;k<3;k++)
                    {
                        if(b[i][k]==b[j][k])
                        {
                            tag=1;
                            break;
                        }
                    }
                    if(!tag)
                        d[i].push_back(j);
                }
            }
            
            for(int i=0;i<12;i++)
            {
                a[1][i]=1;
            }
            for(int i=2;i<=n;i++)
            {
                for(int j=0;j<12;j++)
                {
                    int x = a[i-1][j];
                    for(int k=0;k<d[j].size();k++)
                    {
                        a[i][d[j][k]] +=x;
                        a[i][d[j][k]] %= mod;
                    }
                }
            }
            
            int ans=0;
            for(int i=0;i<12;i++)
            {
                ans+=a[n][i];
                ans%=mod;
            }
            
            return ans;
            
            
        }
        
        void dfs(int i)
        {
            if(i==3)
            {
                for(int i=0;i<3;i++)
                {
                    b[pos][i]=c[i];
                }
                pos++;
                return;
            }
            
            for(int j=0;j<3;j++)
            {
                if(i!=0&&j==c[i-1])
                    continue;
                c[i]=j;
                dfs(i+1);
            }
        }
    };
    
  • 相关阅读:
    modifier key
    功能权限与数据权限的转换、功能权限的分散
    the relationship among AdapterFactory, Adapter, Adaptee and Viewer
    MANIFEST.MF
    eclipse plugin中开发的一些注意事项
    Why is it necessary for an interface to be "declared" abstract?
    防卫力量与公共安全:SAP与地理信息的集成
    SQL Server联机丛书:存储过程及其创建
    伤感的英文单词[转帖]
    ASP中得到当前页面完整URL的方法[转帖]
  • 原文地址:https://www.cnblogs.com/dacc123/p/12684715.html
Copyright © 2011-2022 走看看