查看: 1475| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 求解一道小公司的OA题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
n^2的解法超时
更多图片 小图 大图
组图打开中,请稍候......

上一篇:用List可以初始HashSet吗?
下一篇:求问几道面经中的算法题
🔗
匿名的 2020-11-10 20:58:29 | 只看该作者
全局:
谷歌搜下Z Algorithm...直接用这个算法就可以了。。

看完再顺便掌握下KMP算法 =。=
回复

使用道具 举报

🔗
不知道小帅 2020-11-11 07:17:07 | 只看该作者
全局:
kmp可以解。
如果你了解KMP中next数组的意义的话,next代表当前index之前的子串中真前缀和真后缀相等的最大index。

如图所示,因为next的意义,a + b + c对应的字符串,是等于a' + b' + c'的。而又因为,a' + b' + c'实际上是原字符串的后缀,所以a' = b, b' = c, c' = d。
而a = a', b = b', c = c',我们可以得到a =b = c = d。而d的长度是i - next。
也就是说,只要i % d == 0 且i/d为偶数,当前字符串就必定可以写成a + a的形式。这时候就可以找到前缀匹配的长度了。

评分

参与人数 1大米 +2 收起 理由
我怎么那么帅啊 + 2 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

全局:
不知道小帅 发表于 2020-11-11 07:17
kmp可以解。
如果你了解KMP中next数组的意义的话,next代表当前index之前的子串中真前缀和真后缀相等的最 ...

其实俺没有看懂你的解释,但我觉得lz的题目,可以从尾巴开始for loop求next数组,对吗
回复

使用道具 举报

🔗
不知道小帅 2020-11-15 12:27:32 | 只看该作者
全局:
我怎么那么帅啊 发表于 2020-11-15 10:48
其实俺没有看懂你的解释,但我觉得lz的题目,可以从尾巴开始for loop求next数组,对吗

你是说reverse吗?还是?
回复

使用道具 举报

全局:
KMP求next数组不是要利用之前的结果嘛。原本是for (int i = 0; i < string.length(); i++) // 对于每一个以i为结尾的string 找他的最大common, 然后利用i - 1的结果来算 i 的结果。
我觉得这个题意,for (int i = s.length() - 1; i >= 0; i--) 就可以了,帮我看看这样对吗
回复

使用道具 举报

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

本版积分规则

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