题解 | #最长公共子串#

最长公共子串

http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac

  1. 描述
  2. 给定两个字符串str1和str2,输出两个字符串的最长公共子串
  3. 题目保证str1和str2的最长公共子串存在且唯一。
  4. 数据范围: 1 \le |str1|,|str2| \le 50001≤∣str1∣,∣str2∣≤5000
  5. 要求: 空间复杂度 O(n^2)O(n
  6. 2
  7. ),时间复杂度 O(n^2)O(n
  8. 2
  9. )
  10. 示例1
  11. 输入:
  12. "1AB2345CD","12345EF"
  13. 复制
  14. 返回值:
  15. "2345" alt

这个题目使用滑窗的思路 就是 以最长的 str1字符串为操作主题,然后设置左指针,当前选取的字符如果在这个st2中则 i顺延一位, left做指针不变,就可以。

    def LCS(self , str1: str, str2: str) -> str:
        res=""
        left=0
        for i in range(len(str1)+1):
            if str1[i-left:i] in str2:
                res=str1[i-left:i]
                left+=1
        return res
全部评论
请问为什么要使用最长的字符串呢?用短的str循环次数不是更少嘛
点赞 回复 分享
发布于 2022-03-05 14:16
最短的好像也是可以 但是我觉得时间复杂度用哪个都一样
点赞 回复 分享
发布于 2022-03-06 09:52
牛蛙牛蛙
点赞 回复 分享
发布于 2022-03-06 17:17

相关推荐

评论
点赞
2
分享
牛客网
牛客企业服务