oPPo笔试第三题

放一下第三题我的解题思路:
题目是将字符串s变为包含至少k个"oppo"子串所需要的最小操作次数(只能字符替换)(oppoppo包含2个oppo)
这题我用动态规划做的,定义一个三维数组dp[n][k+1][2],其中最后一个维为0表示不以o结尾,1表示以0结尾
那么递推公式为
当前位置上为o:
    dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j][1])+1
    dp[i][j][1]=min(dp[i][j][0]-1,dp[i-3][j-1][0]+{把前三位位转为”OPP“的代价},dp[i-1][j][1],dp[i-3][j-1][1]+{把中间两位转为”PP“的代价})
    
当前位置上不为o:
    dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j][1])
     dp[i][j][1]=min(dp[i][j][0],dp[i-3][j-1][0]+{中间两位转为”PP“的代价}+1,dp[i-3][j-1][1]+{把中间两位转为”PP“的代价})+1
感觉想得有点复杂,有没有大佬有更好的方法,分享一下
全部评论
是这样做的,我也是
点赞 回复 分享
发布于 2023-09-03 12:43 湖北

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
点赞 3 评论
分享
牛客网
牛客企业服务