首页 > 其他分享 >最小表示法学习笔记

最小表示法学习笔记

时间:2023-08-16 13:55:04浏览次数:41  
标签:dots int aabc 最小 笔记 表示法 字符串

定义

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

比如:\(abca\),对于他,循环同构字符串就有 \(aabc\),\(caab\),\(bcaa\),其中字典序最小的是 \(aabc\)。那么我们说 \(aabc\) 就是 \(abca\) 最小表示法。

算法流程介绍

考虑对于一对子串 \(A,B\) ,它们在原字符串 \(S\) 中的起始位置分别为 \(i,j\) ,且它们的前 \(k\) 个字符均相同,也就是 \(s[i\dots i+k-1]=s[j\dots j+k-1]\)。

考虑下一个字符 \(s[i+k],s[j+k]\):

  1. 若 \(s[i+k]>s[j+k]\),那么 \(i\) 以开头的子串,一定不是 \(S\) 的最小表示法。因为以 \(j\) 开头的子串的字典序一定小于以 \(i\) 开头的更小,因为 \(i\dots i+k\) 的情况一定不比 \(j\dots j+k\) 更优,则我们将 \(i+=k+1\),然后 \(k\) 清零。

  2. 若 \(s[i+k]<s[j+k]\),和上面同理,则将 \(j+=k+1\)。

  3. 若 \(s[i+k]=s[j+k]\),那么继续往后面比较,也就是 \(k++\)。

Code


int getmin(int awa[]){
    int i=1,j=2,k=0;
    while(i<=n&&j<=n&&k<=n){
        int v=awa[(i+k-1)%n+1]-awa[(j+k-1)%n+1];
        if(!v) k++;
        else{
            if(v>0) i+=k+1;
            else j+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}

标签:dots,int,aabc,最小,笔记,表示法,字符串
From: https://www.cnblogs.com/pdpdzaa/p/17631968.html

相关文章

  • 8.16集训笔记
    上午/一维数组排序排序:sort,冒泡,选择,插入,计数复杂度:\(O(nlogn),O(n^2),O(n^2),O(n^2),O(n)\)点击查看代码#include<bits/stdc++.h>#include<algorithm>usingnamespacestd;constintN=1e5+10;inta[N],n;intmain(){//cin>>n;//for(inti=1;i<=n;......
  • 【刷题笔记】23. Merge k Sorted Lists
    题目Mergeksortedlinkedlistsandreturnitasonesortedlist.Analyzeanddescribeitscomplexity.Example:Input:[1->4->5,1->3->4,2->6]Output:1->1->2->3->4->4->5->6题目大意合并K个有序链表解题思路借助分治的思想,把K个......
  • gunicorn学习笔记
    官方文档:https://docs.gunicorn.org/en/stable/部署flask相关2.1参考:https://blog.csdn.net/qq_41608408/article/details/1261107462.2参考:https://blog.csdn.net/luhuibo318/article/details/1026881542.3参考:https://www.jianshu.com/p/fecf15ad0c9a2.4参考:https://w......
  • PPT| 《图解CIO工作指南(第4版)》-读书笔记P143
    PPT共143页,由于篇幅有限,以下为部分资料.......
  • 为什么 setTimeout 有最小时延 4ms ?为什么是4
     写的超级棒,是我要找的答案,转载原文链接:掘金https://zhuanlan.zhihu.com/p/639441280正文在前端技术圈子里面,对于setTimeout常常有一句结论,“setTimeout的最小设置延迟是4ms”。按照“某乎”的方式,在回答一个问题之前得“先看是不是”,“再看对不对或为什么”。我......
  • 笔记整理--C语言——忽略大小写的字符串查找
    char*stristr(char*pString,char*pFind){unsignedlongpFind_len=0;unsignedlongcmp_len=0;char*pt1=NULL,*pt2=NULL;char*pString_pt=pString;///////////////pFind_len=strlen(pFind);if(pFind_len==0){......
  • 《安富莱嵌入式周报》第320期:键盘敲击声解码, 军工级boot设计,开源CNC运动控制器,C语言
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1Cr4y1d7Mp/1、键盘敲击声解码https://arxiv.org/abs/2308.01074键盘敲击声被解码的话,我们使用键盘输入密码将被方便的解码出......
  • ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记
    总览你是否好奇GitHubCopilot如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过。这篇文章记录了我阅读一个对Copilot的逆向工程的笔记,一言以蔽之,Copilot使用了Jaccard相似度获取用户最近访问过的页面里与当前编辑内容最相似的代码......
  • 算法工程师学习运筹学 笔记三 对偶问题
    对偶问题每一个线性规划问题(称为原始问题)都有一个与它对应的对偶线性规划问题(称为对偶问题)。在原始的和对偶的两个线性规划中求解任何一个规划时,会自动地给出另一个规划的最优解;当对偶问题比原始问题有较少约束时,求解对偶规划比求解原始规划要方便得多;对偶规划中的变量就是影......
  • 【学习笔记】lazytag 重学笔记
    还打算用作TikZ练习文。感觉用TikZ画图很酷炫。下面不分析具体问题,直接对于普遍的lazytag问题解决。可以lazytag的问题见atcoderlibrary。......