如何查找具有开始和结束索引的字符串的所有子字符串

2023-12-19

我最近编写了一些处理字符串的 Scala 代码,查找其所有子字符串并保留在字典中找到的子字符串的列表。整个字符串中子字符串的开头和结尾也必须保留以供以后使用,因此最简单的方法似乎就是使用嵌套的 for 循环,如下所示:

for (i <- 0 until word.length)
  for (j <- i until word.length) {
    val sub = word.substring(i, j + 1)
    // lookup sub in dictionary here and add new match if found
  }

作为练习,我决定尝试在 Haskell 中做同样的事情。这看起来很简单,不需要子字符串索引 - 我可以使用类似的东西这种方法 https://stackoverflow.com/a/5377754/241990获取子字符串,然后调用递归函数来累积匹配项。但如果我也想要索引,这似乎更棘手。

我将如何编写一个返回一个列表的函数,该列表包含每个连续子字符串及其在“父”字符串中的开始和结束索引?

例如tokens "blah"会给[("b",0,0), ("bl",0,1), ("bla",0,2), ...]

Update

大量答案可供选择,还有大量新事物可供探索。经过一番混乱之后,我得到了第一个答案,丹尼尔的建议是允许使用[0..].

data Token = Token String Int Int 

continuousSubSeqs = filter (not . null) . concatMap tails . inits

tokenize xs = map (\(s, l) -> Token s (head l) (last l)) $ zip s ind
    where s = continuousSubSeqs xs
          ind = continuousSubSeqs [0..]

鉴于我有限的 Haskell 知识,这似乎相对容易理解。


import Data.List

continuousSubSeqs = filter (not . null) . concatMap inits . tails

tokens xs = map (\(s, l) -> (s, head l, last l)) $ zip s ind
    where s   = continuousSubSeqs xs
          ind = continuousSubSeqs [0..length(xs)-1]

工作原理如下:

tokens "blah"
[("b",0,0),("bl",0,1),("bla",0,2),("blah",0,3),("l",1,1),("la",1,2),("lah",1,3),("a",2,2),("ah",2,3),("h",3,3)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查找具有开始和结束索引的字符串的所有子字符串 的相关文章

  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 无法通过 cabal 安装“System.Random”

    我尝试通过 Cabal 通过 Powershell 和 Git Bash 安装 System Random 得到这个结果 PS C Users xxx gt cabal install random Resolving dependenci
  • 使用 Haskell 的欧拉项目 #1

    import Data Set euler Int euler sum x x lt nums where nums Data Set toList Data Set union Data Set fromList 3 6 999 Data
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • 如何将可选标志解析为 Maybe 值?

    我正在尝试使用optparse 应用程序 https hackage haskell org package optparse applicative 0 11 0 2解析一个Maybe String但我找不到任何地方如何处理Maybe 我
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 可以通过Data.Function.fix来表达变形吗?

    我有这个可爱的fixana这里的函数执行速度比她的姐妹快 5 倍左右ana 我有一个criterion报告支持我这一点 ana alg Fix fmap ana alg alg fixana alg fix f gt Fix fmap f
  • 'lens' 的阴谋集团依赖性解析失败

    我刚刚做了一个阴谋更新并尝试从 hackage 安装 lens 这给了我以下错误 cabal install j lens Resolving dependencies Configuring dlist 0 7 0 1
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • Haskell 错误处理方法

    毫无疑问 Haskell 中有多种机制来处理错误并正确处理它们 错误单子 要么 也许 异常等 那么为什么用其他语言编写容易出现异常的代码比用 Haskell 感觉更简单呢 假设我想编写一个命令行工具来处理命令行上传递的文件 我想 验证提供的
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • 在 Haskell 命令行应用程序中提示输入密码

    以下 Haskell 程序提示用户在终端中输入密码 如果输入正确则继续 main do putStrLn Password password lt getLine case hash password member database of
  • 为什么 Haskell 中的点是从右向左排列的?

    如果我们有两个函数 f and g 然后在哈斯克尔h f g相当于h x f g x IE 这些函数从右到左应用于输入 有什么根本原因可以解释为什么它是从右到左 而不是从左到右吗 IE 他们为什么不做h f g相当于h x g f x 反而
  • Parsec 函数“parse”和类“Stream”的类型签名

    约束条件是什么 Stream s Identity t 下面的类型声明是什么意思 parse Stream s Identity t gt Parsec s a gt SourceName gt s gt Either ParseError
  • 没有由文字“1”产生的 Num String 实例

    main do putStrLn myLast 1 2 3 4 myLast a gt a myLast x x myLast xs myLast xs 当我尝试运行此代码时 我收到此消息 没有由文字 1 产生的 Num String 实例
  • Haskell 中实例声明的参数顺序切换

    我想进行实例声明 但自由类型变量不是最后一个变量 例如 我有一个类声明 class Poppable m where tryPop m a gt Maybe a m a 现在我想让 Q PSQ 优先级队列 成为 Poppable 的实例 具
  • 数据类型变体之间的转换

    假设我想创建一种数据类型的两种变体 一种具有特定的构造函数 另一种没有它 否则它们是相同的 我想出了这个 LANGUAGE KindSignatures LANGUAGE DataKinds LANGUAGE GADTs data Foo
  • 用纯函数式语言保持状态

    我正在尝试弄清楚如何执行以下操作 假设您正在开发直流电机的控制器 您希望让它以用户设置的特定速度旋转 def set point ref sp 90 while true let curr read speed controller set
  • 为什么我的 Haskell 断言只发生在 IHaskell 中?

    如果我定义 import Control Exception assert import Data Char ord f String gt String f s assert all elem letters s letters lt g
  • 不明白这个 haskell 代码中的内容

    我有一些 Haskell 代码 我正在尝试完成它 但我不明白其中发生了什么 type Bag a a gt Int emptyB Bag a emptyB e gt 0 countB Eq a gt Bag a gt a gt Int co

随机推荐

  • 方向改变后移动视口高度

    我正在将一个侦听器附加到orientationchange https developer mozilla org en US docs Web Events orientationchange event window addEventL
  • 在Python 2.5中解码未知unicoding编码的最佳方法[重复]

    这个问题在这里已经有答案了 我完全明白了吗 不管怎样 我正在解析很多 html 但我并不总是知道它的编码是什么 令人惊讶的数字谎言 下面的代码很容易显示我到目前为止所做的事情 但我确信有更好的方法 我们将非常感谢您的建议 import lo
  • 使用Python 2.7.11需要tensorflow会发生ImportError

    I tried pip install tensorflow在 OS X El Capitan 上 它成功了 但是 如果我尝试导入tensorflow 则会发生ImportError 当你知道的时候请告诉我 gt gt gt import
  • Active Directory 本地管理器

    我需要实现一个 Active Directory 本地 管理器 用户可以在其中执行所有任务 例如添加用户 删除用户 分配许可证和分配组等 用户有用户名 密码和域控制器名称 因此他只需登录我的应用程序并管理一切 实际上 物理地安排客户端属性会
  • 轻量级java事务管理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在为主要针对智能手机的回合制持久世界游戏开发游戏服务器 并且我目前正在开始实现持久层 并且我正在寻找一些提示 建议 我最初计划使用
  • 如何使用坐标点在图像上创建热图?

    我有一张尺寸为 1024 x 1360 的病理图像 我有一些区域和坐标点的概率值 如何使用图像上的坐标点和概率值编写热图生成代码 下面给出了概率值 csv 文件格式的详细信息 任何帮助将不胜感激 Edit CSV 文件格式下载 csv 文件
  • 如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?

    当我生成一个新的控制器时 Rails 也会生成一个 js coffee控制器的文件也是如此 因为我不使用 CoffeeScript 所以我想要 Rails 来生成 js给我的文件 注释掉就足够了coffee railsgem 在 Rails
  • C 程序中的命令行参数?

    如何读取C 中的命令行参数 例如 在 test help or test build 如何访问 build 或 help 您的参数位于 argv 中 int main int argc char argv 如果你打印 argv 的内容 ar
  • 如何在 TypeScript 中导入 package.json?

    我正在尝试在 TypeScript 中导入我的 package json 文件 但它似乎不起作用 具体来说 我只是尝试导入它 以便可以访问日志语句的名称和版本属性 就像是 import as pjson from package json
  • ES6 * Typescript:找不到命名空间

    Node7 4 0 ES6 Typescript 2 1 5 WebStorm 2016 3 在线上 导出默认的heroRoutes router I get TS2503 找不到命名空间 heroRoutes 创建它并 init 之后 有
  • 点击后更改(或改回)传单图标

    我已经获得了单击时更改的图标 但是当单击新图标时 我需要将其更改回原始图标 而不是保留新图标 例如 假设我所有的图标都是蓝色的 当我点击一个图标时 我希望它变成红色图标 然后 当我单击新图标时 我希望之前单击的图标变回蓝色 我可以让它与鼠标
  • jdbcTemplate 为空并抛出空指针异常[重复]

    这个问题在这里已经有答案了 我是春天的新手 我正在尝试使用 Spring Web MVC 开发 REST API 我正在尝试使用 JdbcTemplate 从我的数据库 MySQL 中获取一些数据 但是当我在服务器中运行代码时我得到500
  • 无法在 mysql 上使用 root 向用户授予权限

    我正在尝试向 mysql 上的用户授予显式权限 并且我正在这样做 对于已创建的用户 GRANT SELECT INSERT UPDATE DELETE CREATE INDEX ALTER SHOW DATABASES CREATE TEM
  • 如何在 OSX 10.9 中从 ProcessSerialNum 获取 PID?

    GetProcessPID在 OSX 10 9 中被标记为已弃用 并附有注释 使用适当的 processIdentifier 属性 NSRunningApplication 对象 问题是构造类方法NSRunningApplication没有
  • Amazon S3 签名 Url 无法与 Office Web Apps Viewer 配合使用(encodeURIComponent 不起作用)

    我正在尝试使用 iframe 标记嵌入 Office Web Apps Viewer 以在我的网站上显示电子表格预览 我尝试使用encodeURIComponent对url进行编码 但它显示 我们正在获取您的文件 加载栏 但没有任何反应 提
  • 使用 @media 查询时,手机是否会加载不相关的查询和图像?

    如果我的 CSS 基于移动样式 那么使用 media查询逐渐变大的显示器 平板电脑 台式机等 移动设备会使用桌面样式吗 我相信 通常情况下 移动设备会加载所有图像 即使它们不适用于其自己的特定媒体尺寸 这意味着它将加载所有图像并隐藏不匹配其
  • 将 pandas 数据帧转换为 numpy 数组 - 更喜欢哪种方法? [复制]

    这个问题在这里已经有答案了 我需要将大型数据帧转换为 numpy 数组 仅保留数值和类型 我知道有很多有据可查的方法可以做到这一点 那么 更喜欢哪一个呢 df values df as matrix pd to numeric df oth
  • Pandas If 语句(Excel 等效项)

    我正在尝试在 Pandas 中创建一个简单的 if 语句 Excel版本如下 IF E2 ABC C2 E2 我陷入了如何根据字符串或部分字符串分配它的困境 这是我所拥有的 df New Value df E map lambda x df
  • 如何在 Visual Studio 中启用 C++17 编译?

    我想使用 C 17 功能 如何在 Microsoft Visual Studio 中将编译从 C 14 切换到 C 17 或者说它在 VS 的发布版本中不可用 现在有一个下拉菜单 至少从 VS 2017 3 5 开始 您可以在其中专门选择
  • 如何查找具有开始和结束索引的字符串的所有子字符串

    我最近编写了一些处理字符串的 Scala 代码 查找其所有子字符串并保留在字典中找到的子字符串的列表 整个字符串中子字符串的开头和结尾也必须保留以供以后使用 因此最简单的方法似乎就是使用嵌套的 for 循环 如下所示 for i lt 0