hdu 1247 HatWord ,Tries

来源:互联网 发布:数据挖掘导论 pdf 编辑:程序博客网 时间:2024/06/08 15:29

主题思想: 字典树 Tries

另外 c++ string sbustr( int start,int len) if len=-1 ,then until the end of the string

总结起来就是, c++ string substring 参数是起始位置,和长度

java   String substr()   参数是起始位置,和结束位置下标,不包括结束下标
Tries  代码const int R=26;struct Node{    int val=-1;    struct Node* next[R];    Node(){        val=-1;        //very import        memset(next,NULL,sizeof(next));    }};Node* root;int get(string key){    int d=0;    char c;    Node* x =root;    while(x!=NULL){        if(d==key.length()){ return x->val; }        c=key[d];        x=x->next[c-'a'];        d++;    }    return -1;}void put(string key,int val){    Node* x=root;    int d=0;    char c;    while(d<key.length()){        c=key[d];        //very important         if(x->next[c-'a']==NULL)            x->next[c-'a']=new Node();        d++;        x=x->next[c-'a'];    }    x->val=val;}

AC代码:

#include <iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cstdlib>using namespace std;const int maxn=50005;string a[maxn];const int R=26;struct Node{    int val=-1;    struct Node* next[R];    Node(){        val=-1;        memset(next,NULL,sizeof(next));    }};Node* root;int get(string key){    int d=0;    char c;    Node* x =root;    while(x!=NULL){        if(d==key.length()){ return x->val; }        c=key[d];        x=x->next[c-'a'];        d++;    }    return -1;}void put(string key,int val){    Node* x=root;    int d=0;    char c;    while(d<key.length()){        c=key[d];        if(x->next[c-'a']==NULL)            x->next[c-'a']=new Node();        d++;        x=x->next[c-'a'];    }    x->val=val;}int main(){    string s;    int n=0;    root=new Node();    while(cin>>s){        a[n]=s;        n++;        put(s,n);    }    for(int i=0;i<n;i++){        int len=a[i].length();        for(int j=1;j<len;j++){            if(get(a[i].substr(0,j))!=-1&&get(a[i].substr(j))!=-1){                cout<<a[i]<<endl;                break;            }        }    }    return 0;}
原创粉丝点击