楼主: mgccl
跳转到指定楼层
上一主题 下一主题
收起左侧

[字符串] 找到相差只有一个字符的string

🔗
felicity2233 2019-3-1 11:35:59 | 只看该作者
全局:
厉害了各位大神们!!!
回复

使用道具 举报

🔗
zdzapple 2019-3-1 13:28:59 | 只看该作者
全局:
步惊云 发表于 2019-2-27 12:47
题描述有点毛病, 这"只在一个position不一样. "是什么意思?

我理解是 s[j] = t[j] for every j in [0,  ...

这种算法,和我直接遍历字典,一个一个和target比较,复杂度一样吧。

补充内容 (2019-3-1 13:30):
不一样,搞错了。
回复

使用道具 举报

全局:
感谢楼主分享
回复

使用道具 举报

🔗
 楼主| mgccl 2019-3-2 05:33:16 | 只看该作者
全局:
各位用hash方法的需要用rolling hash才能满足expected O(1)时间.
以及题目不给用hash.
回复

使用道具 举报

🔗
 楼主| mgccl 2019-3-4 13:41:13 | 只看该作者
全局:
14417335 发表于 2019-2-27 03:20
如果用rabin karp algorithm,对于任意一个词,做出除去任意一个字母的hash,这个复杂度是O(M)
n个词, ...

对的这个是期望O(mn)时间的算法.
但是这里需要worst case O(mn), hash是expected O(1).
回复

使用道具 举报

🔗
14417335 2019-3-4 22:17:03 | 只看该作者
全局:
mgccl 发表于 2019-3-4 13:41
对的这个是期望O(mn)时间的算法.
但是这里需要worst case O(mn), hash是expected O(1).

我当时觉得用hash,则找到的情况的复杂度会小于O(MN),只有在没找到(worst case)才会是O(MN)。看来还是不能达到要求。

给定不能用Hash的要求,则只有Trie进入思路。但是很容易就O(NMM)。

还请指点。
回复

使用道具 举报

🔗
 楼主| mgccl 2019-3-5 02:35:35 | 只看该作者
全局:
14417335 发表于 2019-3-4 22:17
我当时觉得用hash,则找到的情况的复杂度会小于O(MN),只有在没找到(worst case)才会是O(MN)。看来还是 ...

两个trie, 一个是给所有的string, 另一个是给reverse of all strings.
这样两个trie就encode了所有prefix, suffix的信息.
花了O(MN)时间.

有了这个数据结构, 做到对于任意i, 可以O(N)时间测试是否存在两个string, 除了第i个字符都一样.
回复

使用道具 举报

🔗
14417335 2019-3-5 09:09:02 | 只看该作者
全局:
mgccl 发表于 2019-3-5 02:35
两个trie, 一个是给所有的string, 另一个是给reverse of all strings.
这样两个trie就encode了所有pref ...

没明白的地方:

1. 建立正Trie和反Trie本身就要花费O(MN) running time。这样一来就不再是worst case running time了。

2. 举个例子。现在有下面这些词。我猜你可能要在TrieNode里加List of String Ids。但是复杂度对不上。想不出来如何用O(N)来判断在index=2的时候有相同的词:hello 和 heilo?

hello
handy
abcde
heilo


  1. 正Trie                                           反Trie

  2.         h            a                                     o           e          y
  3.       e    a           b                                 l               d          d
  4.     l   i     n          c                             l   i               c          n
  5.   l       l     d          d                         e       e               b          a
  6. o           o     y          e                     h           h               a          h

复制代码





回复

使用道具 举报

🔗
 楼主| mgccl 2019-3-5 18:33:56 | 只看该作者
全局:
14417335 发表于 2019-3-5 09:09
没明白的地方:

1. 建立正Trie和反Trie本身就要花费O(MN) running time。这样一来就不再是worst case  ...

1. 目标是worst case O(MN)的啊. 建立trie没有问题. trie只建立了一次.

2. 实际上我们需要的信息不是trie本身, 而是trie能给我们的equivalent classes.

我写了个具体实现.

https://chaoxuprime.com/posts/20 ... ance-exactly-1.html

评分

参与人数 1大米 +5 收起 理由
14417335 + 5 很有用的信息!radix sort我再想想

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表