查找一组字符串中 K 个最长的公共后缀

2024-03-11

我想在一组字符串中找到最长的常见后缀,以检测我的自然语言处理项目中的一些潜在的重要语素。

给定频率K>=2,在字符串列表中找到K个最常见的最长后缀S1,S2,S3...SN

为了简化问题,这里举一些例子:

Input1:

 K=2
 S=["fireman","woman","businessman","policeman","businesswoman"]

Output1:

 ["man","eman","woman"]

解释1:

“man”出现 4 次,“eman”出现 2 次,“woman”出现 2 次


如果输出还跟踪每个常见后缀的频率,我们将不胜感激

{"man":4,"eman":2,"woman":2}

不保证每个单词至少具有一个长度的公共后缀,请参见下面的示例。

Input2:

 K=2
 S=["fireman","woman","businessman","policeman","businesswoman","apple","pineapple","people"]

Output2:

 ["man","eman","woman","ple","apple"]

解释2:

“man”出现 4 次,“eman”出现 2 次,“woman”出现 2 次

“ple”出现 3 次,“apple”出现 2 次


有什么高效的算法可以解决这个问题吗?

我参考过后缀树和广义后缀树算法,但它似乎不太适合这个问题。

(顺便说一句,我正在研究一个中文 NLP 项目,这意味着汉字比英文多得多)


如果你想真正高效这张纸 https://mediatum.ub.tum.de/doc/1094574/1094574.pdf有帮助。该算法以 O(n log n) 的时间复杂度为您提供一组字符串中最频繁(最长)的子字符串。基本思想如下:

  1. 将所有字符串与它们之间的空格连接起来(这些字符串稍后用作分隔符),以便形成一个长字符串

  2. 在长字符串上构建后缀数组SA

  3. 对于后缀数组中的每对相邻条目,检查条目引用的两个后缀中有多少个起始字符相等(到达空格时应该停止)。将相等字符的计数放入附加数组(称为 LCP)中。每个条目LCP[i]指的是长字符串中位置SA[i-1]和SA[i]处的字符串的相等字符的计数。

  4. 检查 LCP 并找到计数大于 K 的连续条目。

示例来自报纸 https://mediatum.ub.tum.de/doc/1094574/1094574.pdf对于3个字符串

s1= 巴巴巴布

s2 = 蕉麻

s3 = bbaaa

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找一组字符串中 K 个最长的公共后缀 的相关文章

  • 将所有奇数位置的元素移动到左半部分,将偶数位置的元素移动到右半部分

    给定一个包含正整数和负整数的数组 将所有奇数索引元素移动到左侧 将偶数索引元素移动到右侧 问题的难点是在维持秩序的同时就地做 e g 7 5 6 3 8 4 2 1 输出应该是 5 3 4 1 7 6 8 2 如果顺序不重要 我们可以使用快
  • Sorted(key=lambda: ...) 背后的语法[重复]

    这个问题在这里已经有答案了 我不太明白背后的语法sorted 争论 key lambda variable variable 0 Isn t lambda随意的 为什么是variable在看起来像的内容中陈述了两次dict 我认为这里的所有
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • 使用循环将对象添加到列表(python)

    我正在尝试使用 while 循环将对象添加到列表中 基本上这就是我想做的 class x pass choice raw input pick what you want to do while choice 0 if choice 1 E
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • 查找重叠间隔序列中最大和的算法

    我试图解决的问题在数轴上有一个间隔列表 每个间隔都有一个预定义的分数 我需要返回最大可能的总分 问题是间隔重叠 并且重叠间隔中我只能使用一个 这是一个例子 Intervals Score 0 5 15 4 9 18 10 15 12 8 2
  • Pandas 在特定列将数据帧拆分为两个数据帧

    I have pandas我组成的 DataFrameconcat 一行由 96 个值组成 我想将 DataFrame 从值 72 中分离出来 这样 一行的前 72 个值存储在 Dataframe1 中 接下来的 24 个值存储在 Data
  • Google App Engine 中的自定义身份验证

    有谁知道或知道我可以在哪里学习如何使用 Python 和 Google App Engine 创建自定义身份验证流程 我不想使用 Google 帐户进行身份验证 并且希望能够创建自己的用户 如果不是专门针对 Google App Engin
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is

随机推荐

  • JSF“记住我”选项

    在其他语言中 当用户登录时 您可以将 cookie 的过期日期设置为与今天相差甚远 并且您可以实现此目的 我如何在 JSF2 中实现这个 我有一个 jsf sessionscoped bean 但是如何才能长时间维持这个会话呢 您也可以使用
  • 如何修复Hyperledger Fabric中“执行End-2-End场景失败”的问题?

    我正在尝试运行此处提供的 Fabric 示例 https github com hyperledger fabric samples tree release 1 2 first network https github com hyper
  • 从 Java 创建快捷链接 (.lnk)

    我正在用 Java 编写一个安装程序 启动器 并且需要能够在此过程中在用户桌面上创建快捷方式 我对任何想法都感兴趣 认为这是实现这一目标的最佳方法 我考虑过的一个选择是在 Windows 上使用 VB 脚本并使用本机 shortcut ex
  • 使用阻塞REST请求来实现发布/订阅

    最近 我被要求调查与电话系统供应商集成的可行性 该供应商希望使用 RESTful Web 服务提供电话事件 例如线路振铃 分机应答 呼叫清除 我指出 REST 是一个请求 响应协议 他们正在执行发布 订阅 他们建议的解决方案是发出 HTTP
  • 映射日期时间未转换为正确的格式

    我有这个映射器 在映射逻辑中我将检查属性是否具有属性 CustomDateConverAttribute 如果有 我将调用一个函数将字符串转换为正确的格式 CreateMap
  • 如何取消 HostingEnvironment.QueueBackgroundWorkItem

    有没有办法取消后台任务HostingEnvironment QueueBackgroundWorkItem 有CancellationToken它会通知任务是否被取消 但我该怎么做 参考https msdn microsoft com en
  • Python 无法识别两个相等的字符串

    我在 python 中遇到了一个关于字符串的奇怪问题 我有两个列表 我必须在两个字符串中找到相同的名称 第二个列表是来自之前打开的文件的 readline 这是我的代码 import requests import sys from bs4
  • 将 y 轴网格线添加到 D3 甘特图

    将水平网格线添加到 d3 甘特图的最佳方法是什么这个例子 http bl ocks org baramuyu be8e3005cfcb0aba5f763963c75f3c7e 我最初想制作一个轴并在图表的长度上做刻度线 如这个例子 http
  • 将变量传递给 Mako 模板

    在 Perl 中 通过使用 Template Toolkit 这就是我所做的 Perl my vars name gt Count Edward van Halen tt gt process letters overdrawn vars
  • 通过引用传递参数

    我想问是否可以通过引用将参数传递给脚本函数 即在 C 中执行如下所示的操作 void boo int myint myint 5 int main int t 4 printf d n t t gt 4 boo t printf d n t
  • Angular HttpInterceptor 不更改标头

    我编写了一个 Angular 4 3 6 HttpInterceptor 来添加一些标头字段 但是如果我在调试器中检查它们 标头不会更新 任何想法 import Injectable from angular core import Htt
  • python读取大数据的不同方式

    我正在处理大数据 因此找到一种读取数据的好方法非常重要 我只是对不同的阅读方法有点困惑 1 f gzip open file r for line in f process line how can I process nth line c
  • 更改 Flask/Dash 中的图标

    试图获得favicon加载我遵循了互联网上的建议 server Flask name static folder static app dash Dash external stylesheets external stylesheets
  • Jquery 的选择插件,带有链接插件和选择框

    我是新来的 所以这就是问题 我尝试将所选插件 http harvesthq github com chosen 与链接插件 http www appelsiini net projects chained 一起用于我的选择框 但效果不佳 这
  • 如何配置 virtualenvwrapper 与 pyenv 一起使用

    我正在尝试设置我的 imac mavericks 以便能够轻松切换到不同版本的 python 我使用 rbenv 成功地为 Ruby 项目完成了此操作 并发现 pyenv 正是我在这方面所寻找的 我遇到的问题是使用 pyenv 创建虚拟环境
  • 如何在 git 存储库的特定状态下显示文件的内容?

    我想显示 git 存储库特定状态下的路径给出的文件的内容 我没有成功尝试这个 git show f825334150cd4bc8f46656b2daa8fa1e92f7796d Katana source Git GitLocalBranc
  • 如何使用 IEnumerable<> 类型创建 CodeFunction2?

    我确实需要创建如下所示的内容 我正在构建 2 个类 第一个类是名称为 tableNameAsSingular 即 AddressEntity 的类 在我的第二个工作类中 我需要具有如下所示的内容 public IEnumerable
  • 计时器和 JFrame 错误

    我正在制作一个带有计时器和 JFrame 的游戏 以及许多其他东西 但只有这两个会引起问题 在运行下面的片段后 我收到了一个奇怪的错误 至少对于之前从未使用过这些类的我来说是这样 开始执行这个 private static GameView
  • Java 使用 Math.ceil 向上舍入为 int

    int total int Math ceil 157 32 为什么它仍然返回4 157 32 4 90625 我需要四舍五入 我环顾四周 这似乎是正确的方法 I tried total as double输入 但得到 4 0 我究竟做错了
  • 查找一组字符串中 K 个最长的公共后缀

    我想在一组字符串中找到最长的常见后缀 以检测我的自然语言处理项目中的一些潜在的重要语素 给定频率K gt 2 在字符串列表中找到K个最常见的最长后缀S1 S2 S3 SN 为了简化问题 这里举一些例子 Input1 K 2 S firema