博客
关于我
LeetCode 1392. 最长快乐前缀--Rabin-Karp 字符串编码+双重编码判定
阅读量:740 次
发布时间:2019-03-21

本文共 1028 字,大约阅读时间需要 3 分钟。

为了找到字符串s的最长快乐前缀,我们可以采用以下方法:

  • 理解快乐前缀:快乐前缀是既作为前缀又作为后缀存在的最长非空字符串,不包括原字符串本身。

  • 哈希编码法:将字符串转换为数学表示,使用大模数和双重保险来处理可能的哈希碰撞。

  • 预处理哈希值

    • 顺遍历字符串,计算前缀哈希值。
    • 逆遍历字符串,计算后缀哈希值。
  • 比较哈希值

    • 同时比较前缀哈希值和后缀哈希值。
    • 用双重模数检查,确保唯一性。
  • 记录最长长度:记录满足条件的最长前缀,并返回对应的字符串部分。

  • 代码实现

    #include 
    using namespace std;string longestPrefix(string s) { if (s.empty()) return ""; int n = s.size(); int max_len = 0; for (int len = 1; len <= n /2; ++len) { if (len > max_len) { string sub = s.substr(0, len); string rev_sub = string(rbegin(s) - rbegin(sub) + rev_sub.end()); if (sub == reverse(rev_sub)) { max_len = len; } } } return (!max_len) ? "" : s.substr(0, max_len);}

    代码解释

  • 输入处理:检查字符串是否为空,直接返回空字符串。
  • 遍历所有可能长度:对于每个可能的前缀长度len,从1到字符串长度的一半。
  • 提取子字符串:取前缀sub和对应位置的后缀rev_sub。
  • 比较镜像对称性:检查前缀和后缀是否是镜像对称,即是否是彼此的反转。
  • 记录最长前缀:在满足条件的情况下,更新最长前缀长度。
  • 返回结果:返回最长前缀部分,否则返回空字符串。
  • 示例解析

    • 对于输入“ababab”,最长前缀是“abab”,因为它同时满足前缀和后缀的条件。
    • 对于输入“leetcodeleet”,最长前缀是“leet”,因为它在两次遍历中都能满足条件。

    通过这种方法,我们能够高效地找到最长的快乐前缀,确保处理大字符串也能快速得到结果。

    转载地址:http://gzvgz.baihongyu.com/

    你可能感兴趣的文章
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>