算法题求解

2017-11-26 13:16:38 +08:00
 kaweh

给定字符串 S 和 L,在字符串 S 中寻找 L 的每个字符按顺序出现在 S 中的次数 例如 S=AABBAAA L=ABA 建立下 S 的下标索引 S0=A S1=A S2=B... 可能的结果是 024 025 026 034 035 036 124 ... 136

这题我想了很久了也不会 也搜不到相关结果 求大神指点一番

1867 次点击
所在节点    问与答
9 条回复
neosfung
2017-11-26 13:38:56 +08:00
动态规划,编辑距离的最简单版本
geelaw
2017-11-26 14:45:06 +08:00
一个显然的思路是 F(i, j) 等于 S 前 i 个字符中出现子序列的 L 前 j 个字符的次数。
kaweh
2017-11-26 15:57:38 +08:00
@neosfung 谢谢我去搜索学习下
kaweh
2017-11-26 16:18:41 +08:00
@neosfung 哥们 编辑距离讲的是从一个字符串转换成为另外一个字符串的最少次数 似乎和题目不符啊
neosfung
2017-11-26 16:28:20 +08:00
@kaweh 编辑距离有三种操作,删,增,改。你的需求只需要删去 s 中的字符,使得它变成 L。把编辑距离算法改一下,只留下删的操作就行了
starqoq
2017-11-26 17:41:17 +08:00
这是一个动态规划问题 f[i][j] 表示第一个串匹配到 i 且第二个串匹配到 j 的方案数量
f[i][j] = sum(f[k][j-1],k=1~i-1) (s1i s2j 相等) / 0 (不相等)
zbw0046
2017-11-26 22:43:18 +08:00
f[i][j]=f[i-1][j] +f[i-1][j-1] if s[i]=l[j] f[i-1][j] others
kaweh
2017-11-27 10:48:07 +08:00
面试官反馈:代码考察字符串找子 pattern 的数目
我去!这题是不是直接使用正则表达式得了 确定是在考察算法吗??
kaweh
2017-11-28 14:59:50 +08:00
将 S 通过删除的方式转变为 L 则`编辑距离`就是删除`len(S)`-`len(L)`个字符 但编辑距离不是本题的结果

`暴力解法`:从 L 中选出 len(S)个字符 选出的字符的组合等于 S 则计数 1

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

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

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

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

© 2021 V2EX