其实是个挺正经的算法,但是我实在不知道加什么标签了(
首先考虑一下两个子串相同意味着什么。
设这两个子串为 Sl1…r1,Sl2…r2 (r1−l1=r2−l2),那么对于任意 i,j∈[l1,r1]∪[l2,r2],i≡j(mod|l1−l2|) 有 Si=Sj。
于是考虑枚举 d=|l1−l2| 并枚举其中一个右端点,按照下标模 d 的值分类,维护每一类下标中字符的众数,即可得出将两个子串改成完全相同至少需要改动多少个字符。
结合双指针维护左端点即可。
代码:
1 |
|
其实是个挺正经的算法,但是我实在不知道加什么标签了(
首先考虑一下两个子串相同意味着什么。
设这两个子串为 Sl1…r1,Sl2…r2 (r1−l1=r2−l2),那么对于任意 i,j∈[l1,r1]∪[l2,r2],i≡j(mod|l1−l2|) 有 Si=Sj。
于是考虑枚举 d=|l1−l2| 并枚举其中一个右端点,按照下标模 d 的值分类,维护每一类下标中字符的众数,即可得出将两个子串改成完全相同至少需要改动多少个字符。
结合双指针维护左端点即可。
代码:
1 | #include <cstdio> |
Related Issues not found
Please contact @Alpha1022 to initialize the comment