首页 > 其他分享 >最小表示法

最小表示法

时间:2024-07-22 22:42:18浏览次数:8  
标签:同构 ++ 最小 Lyndon 表示法 字符串

最小表示法

字符串 \(S\) 的最小表示为与 \(S\) 循环同构的所有字符串中字典序最小的字符串。

一般用于判断两个字符串是否循环同构。只需要都用最小表示,然后判断即可。

考虑如何构造。这里oiwiki解释的很清楚。就不做过多解释了。复杂度\(O(n)\)

int i = 1, j = 2, k;
while (i <= n && j <= n) {
    for (k = 0; k < n && a[i + k] == a[j + k]; ++k);
    if (k == n)break;
    if (a[i + k] > a[j + k]) {
        i = i + k + 1;
        if (i == j)i++;
    } else {
        j = j + k + 1;
        if (i == j)j++;
    }
}

例题:
luogu: P1368 【模板】最小表示法

这题有很多方法可以解决,比如SA,SAM,Lyndon 分解。之后会提到,值得注意的是,最小表示不一定是Lyndon 分解后的最后一个串,但是洛谷数据并没有卡掉这种写法

标签:同构,++,最小,Lyndon,表示法,字符串
From: https://www.cnblogs.com/Qing17/p/18317151

相关文章

  • 代码随想录算法训练营第35天 | 动态规划1:509.斐波那契数、70.爬楼梯、746.使用最小花
    代码随想录算法训练营第35天|动态规划理论基础https://programmercarl.com/动态规划理论基础.html#算法公开课509.斐波那契数https://leetcode.cn/problems/fibonacci-number/submissions/548309803/代码随想录https://programmercarl.com/0509.斐波那契数.html#算法公开......
  • 洛谷 求m区间内的最小值
    原题p1440题目描述一个含有 ......
  • 代码随想录数组二刷:长度最小的子数组(滑动窗口)
    代码随想录数组二刷:长度最小的子数组(滑动窗口)leetcode209这道题采用滑动窗口的思想去做。实现滑动窗口,主要确定如下三点:窗口内是什么?如何移动窗口的起始位置?如何移动窗口的结束位置?窗口就是满足其和≥s的长度最小的连续子数组。窗口的起始位置如何移动:如果当前窗口......
  • 代码随想录算法训练营第十七天 | 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的
    530.二叉搜索树的最小绝对差 题目:.-力扣(LeetCode)思路:中序遍历搜索二叉树,使用双指针来计算绝对值。代码:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),......
  • 堆的概念(最大堆和最小堆)以及使用堆的实际应用场景
    堆(Heap)的概念堆是计算机科学中一类特殊的数据结构的统称,它通常可以被看作是一棵完全二叉树的数组对象。堆总是满足以下性质:堆属性:堆中某个节点的值总是不大于(最小堆)或不小于(最大堆)其父节点的值。完全二叉树:堆的物理结构是顺序存储的,即使用数组来表示,且满足完全二叉树的性质,即......
  • CF1364D Ehab's Last Corollary 题解 (构造/独立集/找最小环)
    题意给出一张n个点的无向连通图和一个常数k。你需要解决以下两个问题的任何一个:找出一个大小为\(\lceil\frack2\rceil\)的独立集。找出一个大小不超过k的环。独立集是一个点的集合,满足其中任意两点之间在原图上没有边直接相连。可以证明这两个问题必然有一个可以......
  • D3 广搜(最小步数)
    图的遍历——广度优先搜索题目描述广度优先搜索遍历类似于树的按层次遍历的过程。其过程为:假设从图中的某顶点0出发,在访问了0之后依次从小到大访问各个未曾被访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点......
  • python-最小公倍数(PythonTip)
    [题目描述]编写一个程序,找出能被从1到给定数字n(包括n)的所有数字整除的最小正数(即最小公倍数)。定义函数smallest_multiple()的函数,参数为n。在函数内,返回能被从1到给定数字n(包括n)的所有数字整除而无余数的最小正数。示例输入:5示例输出:60比如,对于输入5,最小公倍数是60,因为......
  • 2439. 最小化数组中的最大值
    题目链接:看到“最小化最大值”想到二分答案。我们猜测一个上界\(\rmlimit\),\(\rmlimit\)越大越符合条件,越小越不易符合条件,满足单调性。由于当前维护的是数组经过操作是否满足最大值为\(\rmlimit\),可以从后往前遍历,遇到比\(\rmlimit\)大的就把大的那部分减去加到前一个......
  • 01-最大N个数和最小N个数的和
    题目给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。说明:*数组中数字范围[0,1000]*最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1*输入非法返回-1思路很明显这是一个数组排序题,并且需要去重,因此很容易想到set集合,能很容......