String 交换字符串中字符的最低成本,这样就不会有3个相同的字符是连续的
我有一个只包含两个字符值的字符串:String 交换字符串中字符的最低成本,这样就不会有3个相同的字符是连续的,string,algorithm,optimization,minimize,minimization,String,Algorithm,Optimization,Minimize,Minimization,我有一个只包含两个字符值的字符串:'a'或'b'。可以将一个字符替换为另一个字符值。字符串中的每个字符都有与交换相关的开销。我需要找到交换的最小成本,这样在结果字符串中就不会有3个连续的字符具有相同的值 如果我们有一个长度为3的连续字符块,那么我们只需交换最小成本字符。如果我们有一个大于长度3的区块,那么我们有很多交换的可能性。我不知道怎么处理这个案子。如何有效地决定在长度大于3的块中交换哪些字符?我们可以在O(6n)=O(n)时间和O(1)空间中解决这个问题 让dp[i][state]表示包含
'a'
或'b'
。可以将一个字符替换为另一个字符值。字符串中的每个字符都有与交换相关的开销。我需要找到交换的最小成本,这样在结果字符串中就不会有3个连续的字符具有相同的值
如果我们有一个长度为3的连续字符块,那么我们只需交换最小成本字符。如果我们有一个大于长度3的区块,那么我们有很多交换的可能性。我不知道怎么处理这个案子。如何有效地决定在长度大于3的块中交换哪些字符?我们可以在
O(6n)=O(n)
时间和O(1)
空间中解决这个问题
让dp[i][state]
表示包含i
第个字符的最佳成本,当最后三个字符是六个有效state
中的一个时(即aab
,aba
,baa
,bba
,bab
,abb
)。然后对于i>2
:
dp[i][aab] ->
if s[i] == "a":
cost[i] + dp[i-1][baa]
else:
dp[i-1][baa]
dp[i][aba] ->
if s[i] == "a":
min(dp[i-1][aab], dp[i-1][bab])
else:
cost[i]+ min(dp[i-1][aab], dp[i-1][bab])
... (left as an exercise)