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

    你可能感兴趣的文章
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>