String 通过将字符串B的子序列附加到空字符串C来创建字符串A所需的最小操作数
您已经给出了两个字符串A和B。您有一些空字符串C。在一个操作中,您可以从字符串B中删除任何数量的字符(从任何位置),并将其附加到字符串C。将字符串C转换为字符串A所需的操作数最少 e、 g如果 A是“ABCDE”和 B是“ABDEC” 在第一个操作中,您将从B和第二个操作DE中选择子顺序ABC 因此,需要进行两次操作 如果 A是“ABCDE” B是“EDCBA”吗 需要5次操作String 通过将字符串B的子序列附加到空字符串C来创建字符串A所需的最小操作数,string,algorithm,data-structures,String,Algorithm,Data Structures,您已经给出了两个字符串A和B。您有一些空字符串C。在一个操作中,您可以从字符串B中删除任何数量的字符(从任何位置),并将其附加到字符串C。将字符串C转换为字符串A所需的操作数最少 e、 g如果 A是“ABCDE”和 B是“ABDEC” 在第一个操作中,您将从B和第二个操作DE中选择子顺序ABC 因此,需要进行两次操作 如果 A是“ABCDE” B是“EDCBA”吗 需要5次操作 线性复杂度预期为O(n)只需使用贪婪算法即可 1-让i=0 2-让j=0 3-在B中j之后搜索第一个A[i] 4-如果
线性复杂度预期为O(n)只需使用贪婪算法即可 1-让
i=0
2-让j=0
3-在
B
中j
之后搜索第一个A[i]
4-如果存在,将
j
作为其在B
中的索引,将其从B
中删除,将其附加到C
,递增i
,然后从3开始重复5-如果不存在,则从2开始重复 每次到达5对应于一个操作 假设
A
(和B
)的所有字符都不同,那么这里有一个线性复杂度的解决方案。您需要一个hashmap或类似的东西,以及一个索引数组,Y
,其长度等于a
和B
1-将hashmap中A
的每个字符作为键,其索引作为值。2-在hashmap中查找
B
的每个字符以获得值i
,并将其索引放入Y
的i
位置3-通过
Y
计算Y[i]
的次数。这是你的手术次数。@SomeDude LCS不会给出正确答案。例如,ABCDE
和ABDEC
之间的LCS是ABDE
,但我们需要ABC
。这个问题的出现是因为我们只能将附加到C
@vivek_23,我看我错过了附加,想到了“插入”。删除了我的评论。@trincot我已经用NLogN复杂性解决了这个问题。我只是想知道它是否可以用线性的方式实现complexity@user3902462出于好奇,你能分享一下O(N logn)方法吗?欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南,在这里申请。StackOverflow不是设计、编码、研究或教程资源。然而,若你们遵循你们在网上找到的任何资源,做出诚实的尝试,并遇到问题,你们就会有一个很好的例子来发布。