【Leetcode】1392. Longest Happy Prefix

题目地址:

https://leetcode.com/problems/longest-happy-prefix/

给定一个字符串,其长度为 k k k的前缀和长度为 k k k后缀有可能相等,问最大的 k k k对应的那个前缀是什么。

题目本质上是求KMP算法中的next数组(KMP有个原始版本和优化版本,这里指的是原始版本。对于原始版本, n [ i ] n[i] n[i]表示 s [ 1 : i ] s[1:i] s[1:i]中最长相等前后缀的长度,规定 n [ 1 ] = 0 n[1]=0 n[1]=0,字符串下标从 1 1 1开始)。参考https://blog.csdn.net/qq_46105170/article/details/113805346。代码如下:

class Solution {
 public:
  string longestPrefix(string s) {
    int n = s.size();
    s = " " + s;
    int ne[n + 1];
    ne[1] = 0;
    for (int i = 2, j = 0; i <= n; i++) {
      while (j && s[i] != s[j + 1]) j = ne[j];
      if (s[i] == s[j + 1]) j++;
      ne[i] = j;
    }

    return s.substr(1, ne[n]);
  }
};

时空复杂度 O ( n ) O(n) O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值