你如何检查两个字符串在字符串中的任何点是不是处于相同的顺序? [关闭]

Posted

技术标签:

【中文标题】你如何检查两个字符串在字符串中的任何点是不是处于相同的顺序? [关闭]【英文标题】:How do you check if two strings are in the same order at any point in the string? [closed]你如何检查两个字符串在字符串中的任何点是否处于相同的顺序? [关闭] 【发布时间】:2022-01-22 11:27:09 【问题描述】:
["word", "ordw"] = True
["word", "odrw"] = False

你如何使用切片来得到这个结果?

【问题讨论】:

我假设你在上面的例子中检查ord?否则我看不出你如何产生预期的结果。 if word in check*2: 【参考方案1】:

简单的暴力破解 O(n^2) 解决方案:

>>> def same_cyclic(w1, w2):
...     return any(w1 == w2[i:] + w2[:i] for i in range(len(w2)))
... 
>>> same_cyclic("word", "ordw")
True
>>> same_cyclic("word", "odrw")
False

优化这将是有趣的部分——如果单词中至少有一个独特的字母,你可以通过旋转使一个字母排列并进行一次比较来将它降低到 O(n)。

对于一般情况,我想我会使用Counter 来查找唯一的字母,然后每次出现该字母时尝试一种排列,这应该可以解释所有可能的情况这两个词可以排列的方式。这将具有 O(m*n) 的时间复杂度,其中 m 是出现频率最低的字母的出现次数。

【讨论】:

以上是关于你如何检查两个字符串在字符串中的任何点是不是处于相同的顺序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章