zoukankan      html  css  js  c++  java
  • Trie树:POJ2001

    这是一道最简单的trie树的题

    有趣的是这道题的测试用例无法在VS上调试,只能在框框里不断提交测试了,哈哈

    最基本的Trie树,插入和查找操作没什么好说的

    注意节点添加一个count变量作为附加条件,记录该字母这这个位置出现的次数,还有几处需要注意的逻辑问题,在注释中标出了

    直接上代码了:

    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    char strList[1005][25];
    struct node
    {
        int count;
        node* childs[26];
        node(){
            count = 0;
            int i;
            for(i=0;i<26;i++){
                childs[i] = NULL;
            }
        }
    };
    
    node* root = new node;
    node* currentNode;
    void insert(char *str)
    {
        int i=0;
        currentNode = root;
        
        for(i=0;i<strlen(str);i++){
            int index= str[i] - 'a';
            if(currentNode->childs[index]!=NULL){
                currentNode = currentNode->childs[index];
                ++(currentNode->count);
            }else{
                currentNode->childs[index] = new node;
                currentNode = currentNode->childs[index];
                currentNode->count = 1;
            }
        }    
    }
    
    void search(char *str)
    {
        currentNode = root;
        int i;
        char res[23];
        for(i=0;i<strlen(str);i++){
            int index = str[i] - 'a';
            //if(currentNode->childs[index]!=NULL)//没有必要判断,因为根据题意,此时一定是有的
            currentNode = currentNode->childs[index];
            res[i] = str[i];
            res[i+1]='';//必须在这里加入'',因为如果没有找到,则会跳出,如果在下面的判断中加‘’会导致最后没有结尾的''.
            if(currentNode->count == 1){break;}//输出+return 或者 直接break
        }
        printf("%s %s
    ",str,res);
        return;
    }
    int main()
    {
        int i,t=0;
        while(scanf("%s",strList[t])!=EOF)
        {
            insert(strList[t]);
            t++;
        }
        for (i = 0; i < t; ++i)
        {
            search(strList[i]);
        }
        return 0;
    }
  • 相关阅读:
    echarts圆套圆
    两个对象深度比较,借鉴,记录
    js异步加载的方式
    elementUI使用el-card高度自适应
    如何在页面上实现一个圆形的可点击区域
    清除浮动
    水平垂直居中的几种方式
    BFC原理
    正则表达式
    Vue项目中难点问题
  • 原文地址:https://www.cnblogs.com/yueyanglou/p/5365280.html
Copyright © 2011-2022 走看看