题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少
题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在的值是否成立,从大到小枚举就好
当枚举值为k时就转换为判断k是否为所求矩阵,判断时我们需要枚举每个点,(看从这个点开始是否向右向下都有连续k个回文串)
而我们可以分别找向右和向下,标记这个点向右或向下是否满足(从这个点开始是否向右向下都有连续k个回文串)
我们找向下时枚举每列每个向右k个字符是否为回文串
如果这个是回文,就在基础上加一否则基础就变成0(连续断掉),接着马上判断基础,大于k就在此位置前面k-1个位置标记为1
时间复杂度就是O(n^3),乘上前面的O(n)就过不了,但是我们可以预处理每个点向右,向下每个长度是否为回文串,这样就可以降O(n)的时间复杂度
预处理可以使用hash就是经典用法。但是一个更简单的方法就是dp,因为我们要找每段,则可以递归
4#include #include