String 通过将字符串B的子序列附加到空字符串C来创建字符串A所需的最小操作数

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-如果

您已经给出了两个字符串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-如果存在,将
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不是设计、编码、研究或教程资源。然而,若你们遵循你们在网上找到的任何资源,做出诚实的尝试,并遇到问题,你们就会有一个很好的例子来发布。