最小表示法

1|0循环同构


如果字符串S选择一个位置i满足

S[i...n]+S[1...i1]=T

则称ST循环同构

2|0最小表示


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

3|0最小表示法


对于一对字符串A,B,他们在原串中的起始位置分别为i,j,且前k个字符均相同,即

S[i...i+k1]=S[j...j+k1]

S[i+k]>S[j+k],则其实下表l[i,i+k]的字符串均不可能为最优解,因为如果有l=i+p则一定有j+p字典序更小,所以可以直接把i移动到i+k+1进行比较。

int minNotation(const vector<int> &s) { int n = s.size(); int i = 0, j = 1; for (int k = 0; k < n && i < n && j < n;) { if (s[(i + k) % n] == s[(j + k) % n]) k++; else { if (s[(i + k) % n] > s[(j + k) % n]) i = i + k + 1; else j = j + k + 1; if (i == j) i++; k = 0; } } return min(i, j); }

__EOF__

本文作者PHarr
本文链接https://www.cnblogs.com/PHarr/p/17564825.html
关于博主:前OIer,SMUer
版权声明CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
posted @   PHarr  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示