开发者社区> 问答> 正文

遇到一个字符配对的问题,求解答。

给你一个字符串,字符串中仅包含"A","B",现在有四种字符串"AA","AB", "BA","BB",每种字符串都有他们的权值,问从给出的字符串中能够得到的最大权值为多少 ( 一个字符只能属于一个子字符串 ) ?输入一个字符串 s(1<=|s|<=10^6);再输入一个数组,数组中包含四个数字a,b,c,d,依次表示字符串"AA","AB","BA","BB"的权值 (1<=a,b,c,d<=100)。输出权值的最大值。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:42:17 407 0
1 条回答
写回答
取消 提交回答
  • 定义一个字典 map,key 分别为 "AA","AB","BA","BB",value 为对应的权值。定义大小为 n 的数组 dp,dp[i] 表示前 i 个字符组成的最大权值,毫无疑问,dp[0]=0,dp[1]=map.get(s.substring(0,2));从 i=2 开始遍历字符串,对于 dp[i],有两个选择,一种是让第 i 个字符独立,即此时的权值 dp[i]=dp[i-1],因为第 i 个字符没有创造价值。另一种选择是让第 i 个字符有价值,即第 i-1 个字符和第 i 个字符组合创造价值,此时 dp[i]=dp[i-2]+map.get(s.substring(i-1,i+1)). 针对这两个选择,取权值最大的即可。因此,dp[n-1] 为最终答案。 输入:"ABA" [1,2, 3,4] 输出:3

    2021-12-23 18:32:58
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载