【发布时间】:2018-02-24 06:56:10
【问题描述】:
给定两个仅包含
0或1的字符串 str1 和 str2,有 是将str1更改为str2的一些步骤,step1:找到str1的一个长度为2的子串并将子串反转,str1变成str1'(str1' != str1)
step2:找到str1'的一个长度为3的子串,将子串反转,str1'变成str1'' (str1'' != str1')
以下步骤类似。
字符串长度在 [2, 30] 范围内
要求:每一步必须执行一次,不能跳过 上一步并执行下一步。
如果可以将str1改为str2,则输出所需的最小步数,否则,输出-1
示例 1
str1 = "1010", str2 = "0011",最小步长为2
首先,在 [2, 3], "1010" --> "1001",
范围内选择子字符串然后选择 [0, 2] 范围内的子字符串,"1001" --> "0011"
示例 2
str1 = "1001", str2 = "0110", 不可能把str1改成str2, 因为在step1中,str1可以改成“0101”或者“1010”,但是在step3中,不可能改变一个length3的子串来使其不同。所以输出是-1。
示例 3
str1 = "10101010", str2 = "00101011",输出为7
我无法弄清楚示例 3,因为有两种可能性。任何人都可以就如何解决这个问题给出一些提示吗?这是什么类型的 问题?是动态规划吗?
【问题讨论】:
-
对于算法需要的效率是否有任何限制?广度优先搜索是否“足够好”,或者该算法是否会在非常长的字符串上运行?
-
字符串长度在 [2, 30] 范围内
-
第 1 步很清楚,但您对第 2 步的期望是什么。??正如您在步骤 1 中所描述的,字符串范围是 [0,2] 和 [2,3]。但是为第 2 步确定的范围和预期结果是什么。
-
“每一步必须执行一次,不能跳过上一步执行下一步”中的上一步是什么。跳过它是什么意思?
-
@PetarPetrovic,这意味着我们必须执行步骤 1,然后执行步骤 2,依此类推,直到将 str1 更改为 str2。只有在执行完第 N-1 步后才能执行第 N 步。