【问题标题】:Move any character from one of the string to the end, find at least how many moves you can make so that two strings become the same string将任意一个字符从一个字符串移动到末尾,找出至少可以移动多少次,使两个字符串变成同一个字符串
【发布时间】:2020-03-27 12:36:59
【问题描述】:

我今天正在做一些编码练习,我遇到了这个问题,我找不到解决这个问题的方法,有人可以分享他们对这个问题的见解吗?



给你两个字符串 S 和 T,你可以将 S 中的任意字符(任意位置)移动到末尾,找出至少可以移动多少次,使 S 和 T 成为同一个字符串。

您可以假设 S、T 的长度相同且字符相同。

示例:
S: cadb
T: abcd

输出:
2

解释:
1.先将'c'移到末尾,然后S变成“adbc”
2.将'd'移到末尾,然后S变成“abcd”,与T相同。



也许 DFS 或 BFS 会有所帮助?我不知道...

当我第一次看到这个问题时,我想出了一个非常幼稚和粗略的想法,即移动每个不在同一位置的字符,然后检查,如果新字符串不同,则再次移动,直到它们变得一样。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    当你完成后,你移动的字符将出现在你移动的所有字符之前,它们将匹配目标字符串的前缀.

    要移动最少的字符,找到 S 的最长子序列,它是 T 的前缀。然后以正确的顺序移动所有其他的子序列以匹配 T 的其余部分。如果你不能,那么就没有可以匹配。

    很容易做到——你只需按顺序从 T 中找到字符:

    T:  lookingForThis
    S:  ThiloFokrinsgo
           ^^ ^^ ^^ ^ 
    Keep: looking
    Move:        ForThis
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2020-01-29
      • 1970-01-01
      • 2012-03-12
      • 2018-02-25
      相关资源
      最近更新 更多