首页 > 其他分享 >3093. 最长公共后缀查询(困难)

3093. 最长公共后缀查询(困难)

时间:2024-04-01 18:46:25浏览次数:21  
标签:cur 后缀 Trie length 查询 3093 int root

核心思想
倒序的字典树,算是板子题吧。
也就是节点的成员变量有变化。

class Trie{
    int idx; // 下标
    int length; // 记录以此为后缀且长度最小的长度
    Trie[] son; // 儿子

    Trie(){
        idx = (int) (1e4 + 10);
        length = (int) (5e3 + 10);
        son = new Trie[26];
    }
}
class Solution {
    public int[] stringIndices(String[] wordsContainer, String[] wordsQuery) {

        Trie root = new Trie();
        int[] res = new int[wordsQuery.length];
        for(int i = 0; i < wordsContainer.length; i++){
            String s = wordsContainer[i];
            int len = s.length();

            // 把长度最小的记录到root节点
            if(len < root.length){
                root.length = len;
                root.idx = i;
            }

            //当前节点
            Trie cur = root;
            char[] charArray = s.toCharArray();
            //后缀
            for(int j = charArray.length - 1; j >=0; j--){
                int id = charArray[j] - 'a';
                // 新建儿子节点
                if(cur.son[id] == null){
                    cur.son[id] = new Trie();
                }
                cur = cur.son[id];

                //记录以此为后缀且长度最小的下标
                if(len < cur.length){
                    cur.length = len;
                    cur.idx = i;
                }
            }
        }
        for(int i = 0; i < wordsQuery.length; i++){
            String s = wordsQuery[i];
            Trie cur = root;
            Trie pre = null; //前节点
            char[] charArray = s.toCharArray();
            //后缀
            for(int j = charArray.length - 1; j >=0 && cur != null; j --){
                int id = charArray[j] - 'a';
                pre = cur;
                cur = cur.son[id];
            }
            // 如果cur为null 说明答案为前节点 否则为当前节点
            // 如果没有公共后缀pre 就是 root
            res[i] = cur == null? pre.idx: cur.idx;
        }
        return res;
    }
}

标签:cur,后缀,Trie,length,查询,3093,int,root
From: https://www.cnblogs.com/ganyq/p/18109143

相关文章

  • Mybatis——查询数据
    查询操作根据用户id查询单条记录,在映射器接口(UserMapper)中定义如下方法:packageorg.example.mapper;importorg.example.demo.User;importjava.util.List;publicinterfaceUserMapper{//根据id查询UserUserselectUserById(IntegeruserId);}当实体类......
  • 【学习笔记】字符串基础:后缀数组
    后置数组好难啊好难啊好难啊好难啊好难啊好难啊最后还是听了不知道从ftp里搞出来的yspm讲课视频才听懂的,但是yspm用的屏幕绘画是看不见的比较尊贵,然后开了画图本文约定字符串下标从\(1\)开始后缀数组后缀数组,即\(\text{SA(SuffixArray)}\),主要关系到两个数组:\(sa......
  • 如何查询大数据信用报告?查询时需要注意的事项有哪些?
    在数字化时代,大数据信用评分对于需要资金周转的个人或企业来说至关重要。许多机构在贷款审批过程中使用大数据信用评分作为风险控制的重要手段。因此,了解自己的大数据信用状况成为了常规操作。本文将详细介绍如何查询大数据信用报告以及查询时需要注意的事项。如何查......
  • 2024年第1期认证人员注册全国统一考试成绩查询今日午时可查
    中国认证认可协会关于2024年第1期认证人员注册全国统一考试成绩查询的通知 各相关机构及人员: 中国认证认可协会(CCAA)于2024年3月2日—3日举办了2024年第1期认证人员注册全国统一考试。4月1日12时起,考生可使用个人证件信息在“认职圈”小程序查询考试成绩(二维码附后),或登录CC......
  • MySQL必学分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`class`(`id`int(11)NOTNULLAUTO_INCREMENT,`createdate`datetimeDEFAULTNULL,`username`varchar(255)DEFAULTNULL,`pwd`varchar(255)DEFAULTNULL,`phone`varchar(255)DEFAULTNULL,`age`int(3)DEFA......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • 查询插入
    INSERTINTOT_AREACODE_ISP_SORT(ID,[BEIANDIQU_CODE],[REGION_CODE],[ISP_GUID],[SERIAL_NUMBER],[CREATE_TIME],[MODIFY_TIME])selectnewid(),'x90009',AREACODE,'9C84C5D5-5C73-45B5-9......
  • GreatSQL 优化技巧:将 MINUS 改写为标量子查询
    GreatSQL优化技巧:将MINUS改写为标量子查询前言minus指令运用在两个SQL语句上,取两个语句查询结果集的差集。它先找出第一个SQL所产生的结果,然后看这些结果有没有在第二个SQL的结果中,如果在,那这些数据就被去除,不会在最后的结果中出现,第二个SQL结果集比第一个SQL结果......
  • Linux下查询文件夹中文件数量的方法
    linux统计文件个数的方法:1、查看路径下文件的个数,代码为【ls-l|grep"^-"|wc-l】;2、查看路径下文件夹的个数,代码为【ls-l|grep"^d"|wc-l】。本教程操作环境:windows7系统、linux7.3版本,该方法适用于所有品牌电脑。推荐:linux视频教程linux统计文件个数的方法:对于linu......