如何检测字符串内相同的部分?
我尝试将 解码算法需求 问题分解为更小的问题。这是第一部分。
问题:
- 两个字符串:s1 和 s2
- s1 的部分与 s2 的部分相同
- 空格是分隔符
- 如何提取相同的部分?
示例 1:
s1 = "12 November 2010 - 1 visitor"
s2 = "6 July 2010 - 100 visitors"
the identical parts are "2010", "-", "1" and "visitor"
示例 2:
s1 = "Welcome, John!"
s2 = "Welcome, Peter!"
the identical parts are "Welcome," and "!"
示例 3:(澄清“!”示例)
s1 = "Welcome, Sam!"
s2 = "Welcome, Tom!"
the identical parts are "Welcome," and "m!"
首选 Python 和 Ruby。谢谢
I try to break down the decoding algorithm wanted question into smaller questions. This is Part I.
Question:
- two strings: s1 and s2
- part of s1 is identical to part of s2
- space is separator
- how to extract the identical part(s)?
example 1:
s1 = "12 November 2010 - 1 visitor"
s2 = "6 July 2010 - 100 visitors"
the identical parts are "2010", "-", "1" and "visitor"
example 2:
s1 = "Welcome, John!"
s2 = "Welcome, Peter!"
the identical parts are "Welcome," and "!"
example 3: (to clarify the "!" example)
s1 = "Welcome, Sam!"
s2 = "Welcome, Tom!"
the identical parts are "Welcome," and "m!"
Python and Ruby preferred. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
编辑:更新了此示例以与所有示例一起使用,包括#1:
哪些输出:
EDIT: Updated this example to work with all the examples, including #1:
Which outputs:
例如 1
对于两者
注意:以上代码对于示例 3 不起作用,这是刚刚添加的 OP
For example 1
For both
Note: Above codes will not work for example 3, which is OP just added
这会在空白处分裂。
同样在单词边界上拆分的解决方案(为了捕获示例 2 中的
!
)在 Python 中不起作用,因为re.split()
不会在零长度匹配。第三个例子,甚至使单词的任何子字符串都成为潜在的匹配,由于存在许多可能的变化,所以事情变得更加复杂(对于
1234
,我必须检查1234
、123
、234
、12
、23
、34
、1
、2
、3
和4
,每增加一个数字,排列的数量就会呈指数级增加。This splits on whitespace.
A solution that also splits on word boundaries (in order to catch the
!
in example 2) doesn't work in Python becausere.split()
won't split on zero-length matches.The third example, making even any substring of the words a potential match, is making things a lot more complicated because of the many possible variations (for
1234
, I'd have to check against1234
,123
,234
,12
,23
,34
,1
,2
,3
and4
, and with each extra digit, the number of permutations increases exponentially.完整的 Ruby 解决方案:
The complete Ruby solution: