如何测试一个字符串是否是另一个字符串的子序列?

2023-11-24

如何测试一个字符串是否是另一个字符串的子序列?

这是比子串更弱的条件。例如“iran”不是“ireland”的子串,但它是一个子序列IRelANd。区别在于子序列不必是连续的。

更多示例:

  • “印度尼西亚”包含“印度”。INDonesIA
  • “罗马尼亚”包含“阿曼”。rOMANia
  • “马拉维”包含“马里”。MALawI

动机:我的朋友喜欢文字游戏。昨天我们玩了“国中之国”。我很好奇我们是否错过了任何一对。

编辑:如果您不熟悉子序列的数学定义

子序列是可以通过删除某些元素而不改变剩余元素的顺序从另一个序列导出的序列


def is_subseq(x, y):
    it = iter(y)
    return all(any(c == ch for c in it) for ch in x)

assert is_subseq('india', 'indonesia')
assert is_subseq('oman', 'romania')
assert is_subseq('mali', 'malawi')
assert not is_subseq('mali', 'banana')
assert not is_subseq('ais', 'indonesia')
assert not is_subseq('ca', 'abc')

也适用于任何可迭代对象:

assert is_subseq(['i', 'n', 'd', 'i', 'a'],
                 ['i', 'n', 'd', 'o', 'n', 'e', 's', 'i', 'a'])

UPDATE

斯特凡·波赫曼提出了这一点。

def is_subseq(x, y):
    it = iter(y)
    return all(c in it for c in x)

两个版本都使用迭代器;迭代器产生前一次迭代中未产生的项目。

例如:

>>> it = iter([1,2,3,4])
>>> for x in it:
...     print(x)
...     break
...
1
>>> for x in it:  # `1` is yielded in previous iteration. It's not yielded here.
...     print(x)
...
2
3
4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试一个字符串是否是另一个字符串的子序列? 的相关文章

随机推荐

  • Xcode 4.3 和 iPhone 模拟器 4.2

    有没有办法在 Xcode 中安装 iPhone Simulator 4 24 3为了狮子 我只能找到如何在 Xcode 4 2 中安装它 但不能找到 Xcode 4 3 for Lion 中的安装方法 我找到了一种将iPhone模拟器4 2
  • Spotify API 非法的redirect_uri

    我正在尝试完成 Spotify 开发人员 API 教程 但当我尝试访问用户登录页面时 出现此错误 我已经三次检查代码中的 URI 是否与 MyApplications 页面上的 URI 匹配 但它仍然无法工作 这是脚本 var expres
  • Python Eyed3 警告

    我的一些 mp3 文件似乎有非标准流派 当我循环遍历它们时 我必须在程序中执行此操作 我收到大量如下警告 eyed3 id3 WARNING Non standard genre name Rock Punk Pop Punk Rock A
  • django-simple-history 中 ManyToManyField 的历史

    简而言之 我需要在历史记录中保存对我的模型之一的多对多字段所做的更改 我可以从 https github com Kyruus django simple history commit 5ba8d2b4d72819f154a11f29779
  • 使用 automake 设置每个文件的标志

    有没有办法使用 automake 在每个文件的基础上设置标志 特别是 如果我有一个 C 项目 并且想要使用 W 编译除我想要禁用特定警告的文件之外的所有文件 我该怎么办 我尝试过类似的东西 CXXFLAGS WAll bin PROGRAM
  • Thread.suspend() 和 .resume() 的替代方法

    我有一大段代码不是循环 只是一个发生一次但需要一些时间的命令列表 我需要它根据不断变化的布尔值随时暂停或终止此操作 我可以使用不同的线程来挂起 恢复和停止此代码 但这些方法已被弃用 因此我想避免使用它们 我可以检查每行代码之间的布尔值 但我
  • PHP表单验证函数

    我目前正在编写一些 PHP 表单验证 我已经验证了客户端 并且有一些重复的代码 我认为这些代码在一个不错的 PHP 小函数中可以很好地工作 但是我很难让它工作 我确信这只是语法问题 但我无法确定它 任何帮助表示赞赏 Validate pho
  • 如何记录所有 Django 表单验证错误?

    在我的 Django 应用程序中 我有一个 forms py 文件 在其中定义了与表单输入屏幕对应的类负载 这些类中的每一个都在该属性 字段特定的 clean 函数中或在表单类的整体 clean 函数中进行一些验证 如果这些 clean 函
  • 清理整数数据库输入

    我有一个通过 POST 请求获取数据的应用程序 我正在使用这些数据将新行插入数据库 我知道使用mysql real escape string 加上删除 和 是处理字符串的方法 但是整数值呢 现在 我正在使用 PHP 函数intval 在他
  • Gradle 同步失败:com/intellij/openapi/util/io/FileUtil.toSystemIndependentName 的 @NotNull 参数“aFileName”的参数不能为 null

    我将我的项目导入到Android Studio 1 3 2现在显示错误 Gradle sync started Gradle sync failed Argument for NotNull parameter aFileName of c
  • git 构建期间“无法在 @INC 中找到 ExtUtils/MakeMaker.pm”

    我正在建造git在一个非常小的系统 Ubuntu 16 04 docker 镜像 上 不使用包管理器 除了wget xz utils make and gcc 因此 我安装先决条件如下 apt get update apt get inst
  • OS X Yosemite 中 ViewController 的动画自定义呈现

    我想实现新方法 我在 Google 和 Stack Overflow 上搜索了很多 但没有找到示例 void presentViewController NSViewController viewController animator id
  • 向重写方法 E_STRICT 观察添加参数

    It appears PHP 5 3 that if you are overriding a class method it is okay to you can add additional parameters as long as
  • HTML5 文档类型定义在哪里?

    旧 HTML XHTML 标准为其定义了 DTD 文档类型定义 HTML 4 01http www w3 org TR html401 sgml dtd htmlXHTML 1 0http www w3 org TR xhtml1 dtds
  • 命名空间“clr-namespace:ABC”中不存在名称“XYZ”

    我正在致力于创建一些标记扩展 并开始出现非常奇怪的 VS 行为 我已在单独的解决方案中提取并查明了该问题 问题是 VS 无法在 XAML 中创建 CLR 对象 这里是 View
  • 如何使用同一域在 NGINX 服务器上运行 django 和 wordpress?

    我尝试了很多方法但不知道如何运行example com 上的 Django and example com blog 上的 WordPress 以下是 Django 和 Wordpress 的运行项目目录结构 Django 应用程序目录 h
  • 在 netbeans 中添加其他项目作为库

    我有一个项目 A 例如基于 Ant 的 Java 应用程序项目 和第二个项目 B 一个 Java 类库项目或另一个 Java 应用程序项目 两者都基于 Ant 构建 项目 B 有一些额外的 Java 库依赖项 Libraries 文件夹中的
  • 使用 git 中的 cparse 库解析用户输入的字符串

    我是 C 编程新手 希望使用解析库在这里找到https github com cparse cparse在我的项目中 我想解释用户输入的字符串 例如 a b 3 对于变量a and b 并在不同的输入集上重复使用它作为函数 例如 将文本文件
  • 使用 WindowManager.LayoutParams.TYPE_KEYGUARD 时,最小目标必须小于 14

    我试图防止状态栏扩展 并且我使用了一些人们试图覆盖主页按钮的示例 所有解决方案都指向使用WindowManager LayoutParams TYPE KEYGUARD 我读here 如果使用 TYPE KEYGUARD 则最小目标必须小于
  • 如何测试一个字符串是否是另一个字符串的子序列?

    如何测试一个字符串是否是另一个字符串的子序列 这是比子串更弱的条件 例如 iran 不是 ireland 的子串 但它是一个子序列IRelANd 区别在于子序列不必是连续的 更多示例 印度尼西亚 包含 印度 INDonesIA 罗马尼亚 包