分解字符串算法
有什么方法把一个字符串分解成全部组成片段呢?
例如,字符串 abcde 可被分解为:
[
["a", "bcde"],
["ab", "cde"],
["abc", "de"],
["abcd", "e"],
["a", "b", "cde"],
["a", "bc", "de"],
["a", "bcd", "e"],
["ab", "c", "de"],
["ab", "cd", "e"],
["abc", "d", "e"],
["a", "b", "c", "de"],
["a", "b", "cd", "e"],
["a", "bc", "d", "e"],
["ab", "c", "d", "e"],
["a", "b", "c", "d", "e"]
]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
先构出造字符串间隔位置对应的二进制,比如abc 对应11,然后从0计算到构造出来的二进制,当某个位置为1时,插入分隔符,每个数都根据分隔符切割即可。比如abc,二进制为11,为0时,字符串没有分隔符,数组为abc,当为01时,字符串为ab!c,可切割为ab和c,当为时,字符为a!bc,可切割为a和bc,当为11时,字符为a!b!c,可切割为a和b和c。
递归虽好,但是也不要滥用,层次深了效率会非常低。有人要算法,那我就贴个代码吧,大家看看就好~
可以看看这篇task,对你有点帮助
9_billion_names_of_God_the_integer
可以参考我的笔记
换个顺序应该就能看出规律了吧:
这是一个典型的动态规划分治问题。每次只考虑把字符串分成两个部分,然后递归求解即可,只不过在递归的时候需要用栈来记录路径。使用 C++ 实现如下:
如果需要排序,可以将输出的结果保存起来然后排序。
@Lzdnku 你的思路把问题转换的非常巧妙。我用 js 实现了
好像比上面动态规划的要长很多?算了不管了
应该是递归实现