首页 > 其他分享 >后缀数组 - half

后缀数组 - half

时间:2024-07-30 22:50:00浏览次数:7  
标签:子串 后缀 rank height 数组 half 排名

后缀数组

后缀数组可以解决有关后缀的问题废话。那么暴力做法肯定是把每个后缀全部取出来,然后按照字典序排序,但是这样复杂度是 \(\Theta(n^2\log n)\) 的。
后缀数组可以解决以下问题:

  • 最长重复子串
  • 多个串的最长公共子串
  • 不同子串个数

算法详解

面对这些问题,我们需要 \(3\) 个数组:\(sa\), \(rank\), \(height\) 数组。
输入图片说明
\(sa_i\) 表示排名为 \(i\) 的后缀,在原串的位置。
\(rank_i\) 表示后缀 \(i\) 的排名
\(height_i\) 表示后缀排名为 \(i\) 的后置和后缀排名为 \(i-1\) 的后缀的最长公共前缀。

https://zhuanlan.zhihu.com/p/561024497

标签:子串,后缀,rank,height,数组,half,排名
From: https://www.cnblogs.com/legendcn/p/18333507

相关文章

  • C语言——数组和排序
    C语言——数组和排序数组数组的概念数组的初始化数组的特点排序选择排序冒泡排序插入排序二分查找数组数组的概念数组是一组数据;数组是一组相同类型的数据或变量的集合;应用场景:用于批量的处理多个数据;语法:类型说明符数组名[常量表达式]类型说明符也就......
  • 数组及数组JVM内存划分day4
    java中第一个存储数据的容器:数组特点:1、数组的长度大小是固定的2、同一个数组中,存储的元素数据类型是一样的数组的定义语句格式:数据类型[]数组名;举例:int[]arr;//定义了一个可以存储int类型的一维数组,数组名叫做arr......
  • 修改文件后缀名程序案例总结
    先说背景,题主要批量修改网上下来的一些图片的后缀名,因为之前学艺不精,搞出来很多问题,这里记录一下(>_<)。之前学习操作文件的时候很草率,总结了一套文件基本操作流程:现在回来才发现这个套路并不适合所有的文件类型先上错误代码:​importjava.io.*;publicclassMain{......
  • 数组元素逆序
    /*数组元素逆序(就是把元素对调)涉及数组元素交换的逻辑的时候,可以定义一个中间变量,作用是临时将值存储一下*/publicclassArrayTest3{publicstaticvoidmain(String[]args){int[]arr={1,2,3,4,5,6,7};System.out.println("......
  • 找出数组中最大和最小值
    找出数组中最大和最小值/*数组获取最值(获取数组中的最大值最小值)*/publicclassArrayTest2{publicstaticvoidmain(String[]args){int[]arr={123,451,45,12,556,12,412};//1、默认将第一个元素作为最大值以及最小值int......
  • (nice!!!)LeetCode 2952. 需要添加的硬币的最小数量(贪心、数组)
    题目:2952.需要添加的硬币的最小数量思路:假设区间[1,s-1]的数都可组合得到,当遍历到x=coins[i]时,1、当x<=s时,可以组合的数就是区间[1,s-1]和区间[x,s-1+x]的交集,即区间[1,s-1+x]2、当x>s时,区间[1,s-1]和区间[x,s-1+x]没有交集,那我就只能通过添加一个数来实现了。在这里......
  • 一维数组
    创建数组一维数组的创建和初始化:声明数组:javaint[]myIntArray;//声明一个整数类型的数组分配内存空间(初始化数组):javamyIntArray=newint[5];//分配一个可以存储5个整数的数组分配数组元素:javamyIntArray[0]=10;myIntArray[1]=20;myIntArray[2]=3......
  • 数组概念
    数组数组(Array)是一种基本的数据结构,用于存储固定数量的元素,这些元素通常是相同类型的。数组提供了一种方式来访问和操作集合数据。以下是数组的一些基本概念:固定大小:一旦声明,数组的大小就不能改变。例如,如果你声明一个包含10个整数的数组,你就不能将其扩展到10个以上的元素。......
  • 数组的算法
    冒泡法冒泡排序(BubbleSort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的......
  • 多维度数组
    多维度数组多维度数组(MultidimensionalArrays)在Java中可以视为数组的数组,最常见的是二维数组,但Java也支持更多维度的数组。多维度数组在内存中并不是连续存储的,它们是按行或按列连续的,这取决于数组的布局方式。声明多维度数组:javaint[][]twoDimArray;//声明一个二维数组i......