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

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 是出现频率最低的字母的出现次数。

【讨论】:

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

C# 检查字符串是不是包含字符串数组中的任何匹配项

如果字符串中的值具有多个点值,如何检查双精度值是不是具有小数部分

使用 Java Regex,如何检查字符串是不是包含集合中的任何单词?

如何检查字符串是不是包含数组中的任何元素[关闭]

如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?

如何在android中检查3g是不是处于活动状态