zoukankan      html  css  js  c++  java
  • poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)

    题目链接:https://vjudge.net/problem/POJ-1056

    题意:给定一个字符串集,判断是否存在一个字符串是另一个字符串的前缀。

    思路:和hdoj1671一样,有两种情况:

      当前长度处已经存在字符串。比如先插入10,再插入101。

      最后一个字符后面还有子结点。比如先插入101,再插入10。

    AC code:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int maxn=1e6+5;
    int cas,trie[maxn][3],key[maxn],cnt,flag;
    char str[15];
    
    void insert(char *s){
        int len=strlen(s),u=0;
        for(int i=0;i<len;++i){
            int t=s[i]-'0';
            if(!trie[u][t]){
                ++cnt;
                memset(trie[cnt],0,sizeof(trie[cnt]));
                key[cnt]=0;
                trie[u][t]=cnt;
            }
            u=trie[u][t];
            if(key[u]){
                flag=0;
                return;
            }
            if(i==len-1) key[u]=1;
        }
        if(trie[u][0]||trie[u][1]) flag=0;
    }
    
    int main(){
        while(~scanf("%s",str)){
            flag=1,cnt=0;
            memset(trie[0],0,sizeof(trie[0]));
            insert(str);
            while(scanf("%s",str),str[0]!='9')
                if(flag) insert(str);
            if(flag) printf("Set %d is immediately decodable
    ",++cas);
            else printf("Set %d is not immediately decodable
    ",++cas);
        }
        return 0;
    }
  • 相关阅读:
    JAVA的中文字符乱码问题
    JAVA SSH 框架介绍
    MySQL必备命令
    java文件操作
    注意事项
    再探java基础——throw与throws
    table与div互相嵌套注意
    数列F[19] + F[13]的值
    统计各类字符个数
    长理ACM 14-星期几(谌海军)
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11830584.html
Copyright © 2011-2022 走看看