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
感觉想得有点复杂,有没有大佬有更好的方法,分享一下
题目是将字符串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
感觉想得有点复杂,有没有大佬有更好的方法,分享一下
全部评论
是这样做的,我也是
相关推荐
03-06 20:09
贵州大学 Java King987:你这个学历找个中大厂刷实习经历都是可以的,但是项目要有亮点才行,这个什么外卖就不要做了,去找找最新的项目,至少涉及高并发或者是新型的AI技术mcp rag啥的 ,我在出简历点评,但是你这个没什么好点评的,内容太少,而且含金量太低。自己改一改吧,或者看一下我的项目地址中,那里有大厂最近做过的实习项目
点赞 评论 收藏
分享
查看17道真题和解析