C++ Trie(字典树)模板

const int N=1e5+10;
int son[N][26];
int End[N];
int idx;
void insert(string s)//插入字符串s进入字典树当中
{
    int p=0;
    for(int i=0;i<s.size();i++)
    {
        char ch=s[i]-'a';
        if(!son[p][ch])
        {
            son[p][ch]=++idx;
        }
        p=son[p][ch];
    }
    End[p]++;
}
bool query(string s)//查询当前字符串是否在字典树中
{
    int p=0;
    for(int i=0;i<s.size();i++)
    {
        char ch=s[i]-'a';
        if(!son[p][ch]) return false;
        else
        {
            p=son[p][ch];
        }
    }
    return End[p];
}
bool startwith(string s)//查询是否有以当前字符串为前缀的字符串
{
    int p=0;
    for(int i=0;i<s.size();i++)
    {
        char ch=s[i]-'a';
        if(!son[p][ch]) return false;
        else
        {
            p=son[p][ch];
        }
    }
    return true;
}

你可能感兴趣的:(蓝桥杯,天梯赛基础通用模板,字符串,算法,c++,字典树,前缀)