题解 | #接头密匙#

接头密匙

https://www.nowcoder.com/practice/c552d3b4dfda49ccb883a6371d9a6932

class Solution {
private:
    int son[100010][10], idx;
    int ed[100010], st[100010];
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param b int整型vector<vector<>> 
     * @param a int整型vector<vector<>> 
     * @return int整型vector
     */
    void insert(vector<int>& s)
    {
        int p = 0;
        int len = s.size();
        for (int i = 0; i + 1 < len; i ++ )
        {
            int x = s[i + 1] - s[i]; // 差分插入 Trie 树
            if (!son[p][x]) son[p][x] = ++ idx; // 创建子节点
            p = son[p][x];
            st[p] ++; // 记录经过当前p节点的字符串数量
        }
        ed[p] ++; // 记录以p为叶子节点的字符串的数量
    }

    int query(vector<int>& s)
    {
        int p = 0;
        int len = s.size();
        for (int i = 0; i + 1 < len; i ++ )
        {
            int x = s[i + 1] - s[i];
            if (!son[p][x]) return 0;
            p = son[p][x];
        }
        return st[p];
    }

    vector<int> countConsistentKeys(vector<vector<int> >& b, vector<vector<int> >& a) {
        // write code here
        vector<int> ans;
        int m = b.size(), n = a.size();
        for (int i = 0; i < n; i ++ )
            insert(a[i]); // 插入a的每个串
        for (int i = 0; i < m; i ++ )
            ans.push_back(query(b[i])); // 查询b的每个串
        return ans;
    }
};

全部评论

相关推荐

头像
昨天 15:01
郑州大学 Java
河南焦作人,双2计算机,迪子做java,所里java➕人工智能
Googasy:去军工里做java、人工智能都没前途
投递中电科金仓等公司10个岗位 >
点赞 评论 收藏
分享
华为海思,双非本硕985,现已进池,会卡本科吗?
鼠鼠心态完全放平:排序,你如果手上的活很好,就不看,如果大家差不多,那就看
投递海思半导体等公司10个岗位 > 华为求职进展汇总
点赞 评论 收藏
分享
邦邦我真的好喜欢你啊:我恭喜你😋😍我🦈了你😤😡我恭喜你😋😍我🦈了你😤😡我恭喜你😋😍我🦈了你😤😡我恭喜你😋😍我🦈了你😤😡我恭喜你😋😍我🦈了你😤😡
点赞 评论 收藏
分享
主页这么好的公司是谁在进啊:虽然很想感谢你的分享,但是此刻的嫉妒和酸气已经涌上心头,所以我撤销一下对你的感谢吧,希望你能原谅我
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务