【问题标题】:Finding a substring in a jumbled string在混乱的字符串中查找子字符串
【发布时间】:2020-06-28 13:52:41
【问题描述】:

我正在编写一个脚本 - includes(word1, word2) - 它将两个字符串作为参数,并查找 word1 是否包含在 word2 中。 Word2 是一个字母混乱。它应该返回布尔值。也允许重复字母,我只检查字母是否以相同的顺序包含在两个单词中。

>>>includes('queen', 'qwertyuytresdftyuiokn')
True

'queen', 'QwertyUytrEsdftyuiokN'

我尝试将每个单词转换为列表,以便更轻松地处理每个元素。我的代码是这样的:

def includes(w1, w2):
    w1 = list(w1)
    w2 = list(w2)
    result = False
    for i in w1:
        if i in w2:
            result = True
        else:
            result = False
    return result

但问题是我还需要检查 word1 的字母在 word2 中的顺序是否相同,而我的代码无法控制它。我找不到用列表实现它的方法。就像我不能用字符串做很多事情一样,所以我认为我需要使用另一种数据结构,比如字典,但我对它们了解不多。

【问题讨论】:

    标签: python-3.x string list dictionary


    【解决方案1】:

    如果您不只是检查子字符串:

    def include(a, b):
        a = "".join(set(a)) # removes duplicates
        if len(a) == 1:
            if a in b:
                return True
            else:
                return False
        else:
            try: 
                pos = b.index(a[0])
                return include(a[1:], b[pos:])
            except:
                return False
    
    print(include('queen', 'qwertyuytresdftyuiokn'))
    #True
    

    【讨论】:

      【解决方案2】:

      我希望我明白你的目标是什么。
      Python 不是我的菜,但我认为我把它变成了 Pythonic:

      def is_subsequence(pattern, items_to_use):
          items_to_use = (x for x in items_to_use)
          return all(any(x == y for y in items_to_use) for x, _ in itertools.groupby(pattern))
      

      https://ideone.com/Saz984

      解释:

      • itertools.groupby 转移 pattern 的方式是丢弃构成重复项
      • all items form form grouped pattern 必须满足条件
      • any 使用生成器 items_to_use,只要它与当前项目不匹配。请注意,items_to_use 必须在最终表达式之外定义,因此每次验证来自 pattern 的下一项时都会保持其进度。

      【讨论】:

      • 您的代码几乎总是有效,但问题是当第一个单词连续具有相同字母时,它不会返回 true。即使 word1 中重复的字母在 word2 中只找到一次,它也应该返回 true。
      • 已修复,我错过了角落案例。
      • 非常感谢。你能解释一下你是怎么修的吗?我能理解你以前的代码,但不是这个。
      猜你喜欢
      • 2023-04-05
      • 2011-07-13
      • 2012-09-07
      • 2021-08-13
      • 2015-10-28
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多