咨询一个字符串去重算法的实现

2021-03-13 00:11:39 +08:00
 LeeReamond

如题,需求是有一些含有重复字符的字符串,想要得到干净版本

Waaaaaaaaao! -> Wao!

还有一些两个字符重复的,比如

hhahahahahaha ! -> hha!

不考虑三字符重复情况。 想了一下,搞一个缓存状态,缓存临近 2 字符似乎实现起来也不难,但总觉得实现起来不太干净的样子。v 友们集思广益一下,有没有什么好的写法。

2645 次点击
所在节点    Python
17 条回复
hsfzxjy
2021-03-13 00:34:34 +08:00
正则一把梭
双字符 re.sub(r'(.{,2}?)(\1)+', r'\1', 'abcabcddddd')
任意多字符 re.sub(r'(.+?)(\1)+', r'\1', 'abcabcddddd')
ClericPy
2021-03-13 00:35:19 +08:00
加强版的零宽断言面试题...? 太晚了先睡觉了
klesh
2021-03-13 00:52:47 +08:00
hha 不算重复?
also24
2021-03-13 01:06:08 +08:00
我觉得首先需要明确一下题意,我这里构造一个样例:
Waaahahah!

对于这个样例,要怎么处理呢?

从左至右,一次性处理的话,会先处理 3 个 a,然后处理 2 个 haha:
W[aaa][haha]h! -> Wahah!

从右至左,一次性处理的话,会先处理 3 个 ah,然后处理 2 个 a:
W[aa][ahahah]! -> Waah!

从左至右,每次只处理一种情况,然后从头开始处理的话,会先处理 3 个 a,然后处理 3 个 ah:
W[aaa]hahah! -> Wahahah! -> W[ahahah]! -> Wah!
ericgui
2021-03-13 02:07:53 +08:00
hha -> ha ?

这个咋办?

重复两次不算重复?三次以上才算?
ipwx
2021-03-13 02:45:43 +08:00
楼主得先明确需求。。。
zxCoder
2021-03-13 08:31:32 +08:00
hhahahahahaha ! -> hha!

这个怎么得到的。。。。
xiadong1994
2021-03-13 08:51:04 +08:00
问算法题请先把问题描述严谨了
AndyAO
2021-03-13 08:56:07 +08:00
先把需求描述清楚,如果很难,至少给出测试
Merlini
2021-03-13 09:23:46 +08:00
我觉得应该是搞一个 vocab,然后递归计算 edit distance 找最近的
FucUrFrd
2021-03-13 09:24:12 +08:00
李先生,Python 不是一般人学的,习学生批准了吗
Merlini
2021-03-13 10:06:48 +08:00
上面说错,不是递归是回溯
LeeReamond
2021-03-13 14:09:02 +08:00
@klesh
@ClericPy
@also24
@ericgui
@ipwx
@zxCoder
@xiadong1994
@AndyAO
@Merlini
感谢回复,已更新题干,另外递归方案肯定不行,原题干里忘说了,这种作为滤镜的逻辑需要速度快一些
LeeReamond
2021-03-13 14:10:09 +08:00
另外请各位教我如何举报 11 楼,我 V2EX 使用不熟练
zxCoder
2021-03-13 14:29:12 +08:00
@LeeReamond 仍然不清楚你的需求。。。hhahahahahaha ! -> hha! 能解释一下这个怎么来的吗?

我猜你是要找出一个字符串里所有出现过的字符?
also24
2021-03-13 15:06:52 +08:00
@zxCoder #15
参考我在 4 楼回复的第二种处理方式,从右至左,一次性处理
(第二个 h 作为右边的 ha 被处理过了,所以没有被开头的 h 吃掉)

h [ ha-ha-ha-ha-ha-ha ]
keivenliao
2021-03-15 14:31:14 +08:00
我在想,这个需求,如果一大段英文做为输入,单个字符作为检测的话,输出岂不是一定为 a 到 z ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/761202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX