给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

示例 1:

输入: "aacecaaa"
输出: "aaacecaaa"

示例 2:

输入: "abcd"
输出: "dcbabcd"

解题思路一

直觉告诉我们,我们找出左边的最长回文子串,比如aacecaaa左侧最长的回文子串就是aacecaa,然后将右侧剩余的部分反转补到原串的左侧即可。由于找的是最长的回文子串,直接从右往左,找到第一个回文子串即可。对应的代码如下所示

class Solution:def shortestPalindrome(self, s):""":type s: str:rtype: str"""r = 1for i in range(len(s), 0, -1):if s[0:i] == (s[0:i])[::-1]:r = ibreakreturn (s[r:])[::-1] + s

解题思路二

第二种思路相较于第一种思路更为巧妙,利用到了KMP中的fail数组,也有人叫做next数组。

因为fail数组中记录了最短回退位置,也即保证了回退后所匹配的部分是最长的。我们直接将原串和反转的原串拼在一起,求出其fail数组,最后的位置能够回退到的位置即为左侧最长的回文子串。

#include<bits/stdc++.h>using namespace std;static auto x = []() {std::ios::sync_with_stdio(false);std::cin.tie(NULL);return 0;
}
();const int maxn = 100010;
int fail[maxn];class Solution {
public:string shortestPalindrome(string s) {string t(s);reverse(t.begin(), t.end());string st = s + "#" + t;int sz = st.size();for(int i = 0,j = fail[0] = -1; i < sz; ++i) {while(j != -1 && st[i] != st[j])j = fail[j];fail[i + 1] = ++j;if(st[i + 1] == st[j])fail[i+1] = fail[j];}return t.substr(0, t.size()-fail[sz]) + s;}
};int main() {return 0;
}

转载于:https://www.cnblogs.com/crackpotisback/p/10219544.html

leetcode 214. 最短回文串 解题报告相关推荐

  1. LeetCode 214. 最短回文串(字符串哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...

  2. Leetcode 214.最短回文串

    Time: 20190906 Type: Hard 题目描述 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: &qu ...

  3. 214. 最短回文串

    214. 最短回文串 原始题目链接:https://leetcode.cn/problems/shortest-palindrome/ 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文 ...

  4. leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)

    题目 https://leetcode.com/problems/shortest-palindrome/ 题解 看了 Related Topics - Rolling Hash 下的相关题目,看到了 ...

  5. Leetcode 125. 验证回文串 解题思路及C++实现

    解题思路: 利用头尾双指针:i ,j . 需要判断每一个字符是否为字母或数字,c++中对应的函数为 isalnum,如果不是字母或数字,返回0. c++中判断大小写字母字符的函数是 isalpha,是 ...

  6. leetcode214. 最短回文串

    214. 最短回文串 难度困难114 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa& ...

  7. python最短回文串_LeetCode-Python-214. 最短回文串

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  8. 力扣- - 最短回文串(KMP算法)

    力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...

  9. leetcode214. 最短回文串(kmp)

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

最新文章

  1. python学习(8)
  2. 十个最适合 Web 和 APP 开发的 NodeJS 框架 1
  3. asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...
  4. 举个对联广告随机播放的例子
  5. 深入理解OAuth2.0协议
  6. 操作系统—进程同步与互斥问题之生产者消费者问题,附赠PV操作题解题思路(思维导图版)
  7. 腾讯云账户注销操作教程
  8. 八类网线测试仪之深入探讨-AEM
  9. 常见水果/蔬菜/植物nbsp;英语词汇大全
  10. nc65右键生成菜单_NC常见问题处理
  11. Ain_电脑所有乱码文字集
  12. E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms
  13. 集成Health Kit时因证书问题出现错误码50063的解决方案
  14. 设置MySQL数据库允许root用户任意IP地址访问(linux)
  15. ahri8.php,文件上传处理 - [ php中文手册 ] - 在线原生手册 - php中文网
  16. 数商云分析:“百亿市场”大幅缩水 医疗器械产业未来如何布局
  17. 西安临潼秦始皇陵、地宫、八大奇迹馆、骊山一日游
  18. 元素被鼠标掠过控制另一个元素显隐
  19. 在Word中巧改厘米标尺(转)
  20. Java2实用教程第五版+第四章习题答案

热门文章

  1. 计算机网络(一)计算机网络概述、组成、功能分类、性能指标 | 思维导图
  2. Linux下使用MySQL——忘记root密码及修改MySQL默认编码
  3. java 画图覆盖_请教如何在java画图中不覆盖原来的画图???
  4. 三体系建设是什么意思_湖南信息系统建设和服务能力评估体系怎么做?是什么?...
  5. mysql5.7数据恢复_mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解
  6. 【干货】为什么都跑去用HTTPS了?
  7. php怎么实现即时聊天,php实现socket即时通讯示例
  8. python找人,PythonOpenCV:查找未知人物
  9. Linux参数顺序,【每日一linux命令3】参数(或称选项)顺序
  10. 红帽子linux开启telnet,RedHat linux 9下配置telnet服务 | 技术部落