ZOJ 1026 T9  输入法  字符串处理

【描述问题】

一个9宫格键盘,图示


连续输入根据经验产生提示

【思想】

这个有个问题就是经验权值,有要根据不同输入模糊匹配。需要通过Hash 类似方式存放,然后就是权值排列问题。

比较输入4-3-3-5-6 可能同时表示其他单词。

【时空】

空间:O(n)  链表实现

时间:O()    这个根据平均查找长度不同

【代码】

代码部分有:

(1) 实现动态构建树 查找

(2)查找当前输入匹配的所有单词指针头

[html]  view plain copy print ?
  1. /** Code For Keenbo @ 2012*/  
  2. void createTree(struct node* head,char* str,int weight)
    {
    /*find the target node*/
    int index;
    struct node * p;
    p=head;
    index=0;
    while(str[index++]!='\0')
    {
    int next;
    switch(str[index])
    {
    case 'a':case 'b':case 'c':next=0;break;
    case 'd':case 'e':case 'f':next=1;break;
    case 'g':case 'h':case 'i':next=2;break;
    case 'j':case 'k':case 'l':next=3;break;
    case 'm':case 'n':case 'o':next=4;break;
    case 'p':case 'q':case 'r':case 's':next=5;break;
    case 't':case 'u':case 'v':next=6;break;
    case 'w':case 'x':case 'y':case 'z':next=7;break;
    default:next=8;break;
    }
    if(p->next[next]!=NULL)
    p=p->next[next];
    else {
    struct node * newnode=new node();
    newnode->words=NULL;
    p->next[next]=newnode;
    p=newnode;
    }
    }


    /*insert the node*/
    struct word * wp=p->words;
    while(wp!=NULL)
    {
    if(wp->weight<=weight)
    break;
    wp=wp->next;
    }
    struct word * newword=new word();
    newword->next=NULL;
    newword->value=str;
    newword->weight=weight;
    if(wp!=NULL)
    {
    newword->next=wp;
    wp=newword;
    return ;
    }
    wp=newword;
    }


    void findWords(struct node* head,char* keys,struct word* words)
    {
    int index;
    struct node* p;
    index=0;
    p=head;
    while(keys[index++]!='0'&&p!=NULL)
    {
    int i=(int)keys[index]-(int)'0';
    p=p->next[i];
    }
    if(p==NULL)
    {
    words=NULL;
    return;
    }
    words=p->words;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值