給定乙個字串s[1~n],如果不斷把最後乙個字元放到開頭,最終會得到n個字串,稱這n個字串是迴圈同構的。這些字串中字典序最小的乙個,稱為字串s的最小表示法。可以在o(n
)o(n)
o(n)
的時間內找出字串的最小表示法。
/*最大表示法*/
intget_max
(char s)
}return
min(i, j);}
/*最小表示法*/
intget_min
(char s)
}return
min(i, j)
;}
luogu p1368 【模板】最小表示法
題意:找出乙個序列的最小表示法,序列長度:n
<=3
∗105
n <= 3*10^5
n<=3
∗105
題解:最小表示法模板題
**:
#include
using
namespace std;
intconst n =
6e5+10;
typedef
long
long ll;
int n, t, m, a[n]
;int
get_min()
}return
min(i, j);}
intmain()
int idx=
get_min()
;for
(int i = idx; i < idx + n;
++i)
return0;
}
hdu-2609 how many
題意: 每組資料給出 n 個可迴圈字串,問有多少種不同的字串
題解:將每個字串的最小(大)表示法計算出來,然後丟到set中判重
**:
#include
using
namespace std;
intconst n =
1e4+10;
char str[n]
,temp[n]
;int
get_max
(char s)
}return
min(i, j);}
intmain()
printf
("%d\n"
,s.size()
);}return0;
}
最小表示法
最小表示法就是找出字串s的的迴圈同構串中字典序最小的乙個。那麼什麼是迴圈同構串呢。是 設s bcad 且s 是s 的迴圈同構的串。s 可以是 bcad 或者cadb,adbc,dbca 即在字串s中從i 0開始,從i迴圈到字串末尾,再從頭迴圈到i,所形成的字元就是s迴圈同構串。因為這樣的同構串不止乙...
最小表示法
最小表示法 思想 在字串迴圈同構問題中的應用 摘自周源的ppt 前言 最小表示法 比起動態規劃 貪心等思想,在當今競賽中似乎並不是很常見。但是在解決判斷 同構 一類問題中卻起著重要的作用。本文即將討論字串中的同構問題,如何巧妙地運用最小表示法來解題呢,讓我們繼續一起思考吧。到底什麼是迴圈同構的字串呢...
最小表示法
最小表示法與kmp演算法一樣都可以解決字串匹配問題,但效率更高,短,作用更大。最小表示法就是乙個字串的最小字典序。怎麼求乙個字串的最小字典序呢?首先將這個字串擴充套件一倍 建設存在d陣列裡 然後我們用三個指標i 0,j 1,k 0,來尋找最小字典序的開頭字母,為了優於kmp,我們要做到o n i表示...