博客
关于我
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/

    你可能感兴趣的文章
    MFC模态对话框和非模态对话框
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    mxGraph改变图形大小重置overlay位置
    查看>>
    MongoDB可视化客户端管理工具之NoSQLbooster4mongo
    查看>>
    Mongodb学习总结(1)——常用NoSql数据库比较
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    mongodb定时备份数据库
    查看>>
    mppt算法详解-ChatGPT4o作答
    查看>>
    mpvue的使用(一)必要的开发环境
    查看>>
    MQ 重复消费如何解决?
    查看>>
    mqtt broker服务端
    查看>>
    MQTT 保留消息
    查看>>
    MQTT 持久会话与 Clean Session 详解
    查看>>
    MQTT工作笔记0007---剩余长度
    查看>>
    MQTT工作笔记0009---订阅主题和订阅确认
    查看>>
    Mqtt搭建代理服务器进行通信-浅析
    查看>>
    MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>