题解 | #最长回文串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

动态规划解决的遍历顺序

具体的动态规划的思想已经有很多小伙伴说过了,此处不再赘述。动态规划一定要注意遍历的顺序。

我们的动态规划转移方程为:dp[i][j] = dp[i+1][j-1]
所以更新dp[i][j]之前,一定要保证dp[i+1][j-1]已经被更新过了,是最新的值而不是原始值。具体来看代码:

如果你的遍历顺序是下面这样的:

...
for(int i = 0 ; i < n ; i++ ){//左边界
    for(int j = i ; j < n ; j++ ){//控制右边界
        ...
        flag[i][j] = flag[i+1][j-1];
        ...
     }
}

那么就踩雷了。你的遍历顺序是从左到右的遍历,在你遍历flag[i][j]时,flag[i+1][j-1]还没有被更新,所以,即便flag[i+1][j-1]本应该是回文,但是因为还没有被遍历到,此时依旧为原始值false,那么flag[i][j]也为false,最后得不到正确的答案。所以我们在遍历flag[i][j]时,需要已经遍历过flag[i+1][j-1]才可以。具体的遍历顺序如下所示。

public class Solution {
    public int getLongestPalindrome(String A, int n) {
        // write code here
        if(n < 2) return n;

        boolean[][] flag = new boolean[n][n]; //动态规划
        int maxLen = 1; // 存储最长的回文长度

        for(int i = 0 ; i < n ; i++) flag[i][i] = true; //对角线赋值为真

        for(int i = n - 1 ; i >= 0 ; i-- ){//控制左边界
            for(int j = n - 1 ; j > i ; j-- ){//控制右边界

                //只有一个字母已经赋值为真,两端不同flag[i][j]不可能为回文
                if(i - j == 0 || A.charAt(i) != A.charAt(j)) continue; 

                //两端相同,且为两个字母,一定为回文
                if(j - i < 2) flag[i][j] = true;

                //两端相同,此时应该使用状态转移方程
                //在更新flag[i][j]之前应该先保证flag[i+1][j-1]已被更新过而非原始值
                else flag[i][j] = flag[i+1][j-1];

                //更新最长长度
                if(flag[i][j]) maxLen = Math.max(maxLen , j - i + 1);
            }
        }
        return maxLen;
    }
}
全部评论

相关推荐

牛客76783384...:字节:不要放箭,活捉赵子龙
点赞 评论 收藏
分享
行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务