Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.
For example:
Given "aacecaaa"
, return "aaacecaaa"
.
Given "abcd"
, return "dcbabcd"
.
public class Solution { public String shortestPalindrome(String s) { if (s == null || s.length() == 0) { return ""; } String copy = s; StringBuffer stringBuffer = new StringBuffer(s); StringBuffer reverse = stringBuffer.reverse(); s = reverse.toString(); char[] charArr = manacherString(s); int[] pArr = new int[charArr.length]; int index = -1; int pR = -1; int max = -1; for (int i = 0; i < pArr.length; i++) { pArr[i] = pR > i ? Math.min(pArr[2 * index - i], pR - i) : 1; while (i + pArr[i] < charArr.length && i - pArr[i] > -1) { if (charArr[i + pArr[i]] == charArr[i - pArr[i]]) { pArr[i]++; } else { break; } } if (i + pArr[i] > pR) { pR = i + pArr[i]; index = i; } if (pR == charArr.length) { max = pArr[i]; break; } } char[] tmp = new char[s.length() - max + 1]; for (int i = 0; i < tmp.length; i++) { tmp[tmp.length - 1 - i] = charArr[i * 2 + 1]; } return new StringBuffer(new String(tmp)).reverse() + copy; } private char[] manacherString(String s) { // TODO Auto-generated method stub char[] charArray = s.toCharArray(); char[] res = new char[s.length() * 2 + 1]; int index = 0; for (int i = 0; i < res.length; i++) { res[i] = (i & 1) == 0 ? '#' : charArray[index++]; } return res; } }
相关推荐
...The number of questions is increasing recently. Here is the classification of all `468` questions. ...I'll keep updating for full summary and better solutions....|-----|---------------- | --------------- |...
Palindrome,为了满足时间复杂度要求,这里求回文串使用Manacher算法 2019/07/11 新增 224. Basic Calculator,求表达式的值,一般思路是把常规的“中缀表达式”转换为“逆波兰式”(后缀表达式),然后计算(用栈很方便) ...
3. **栈和队列**:栈(Last In First Out, LIFO)和队列(First In First Out, FIFO)是两种基础数据结构,常见题目如"有效的括号"(Valid Parentheses)用栈来检查括号匹配,"最短回文串"(Shortest Palindrome)则...
"K Shortest Path"(K条最短路径)是寻找图中两个顶点间多于一条最短路径的问题。这个任务通常用于在网络流量管理、交通规划以及分布式系统中。这里我们主要讨论如何用C++实现K Shortest Path算法。 首先,我们来看...
"Matlab k Shortest Path" 是一个专门用于寻找图中具有最少成本的k条路径的工具。在这个项目中,我们可以看到四个核心文件:`kShortestPath.m`、`dijkstra.m`、`TestKShortestPath.m` 和 `license.txt`。 1. **...
**标题:ShortestPath** **描述:**在计算机科学领域,单源最短路径问题是一个经典问题,旨在寻找网络图中从一个特定源节点到所有其他节点的最短路径。这里提到的“ShortestPath”是指应用了贪心算法Dijkstra(迪杰...
在“11 ShortestPath.zip”这个压缩包中,我们可以预见到一系列关于求解最短路径问题的算法实现。 1. 最短路径问题概述: 最短路径问题寻找的是网络中两个节点之间的最短路径,这里的“最短”通常是指路径上的边权...
本资源"11 ShortestPath.rar"显然是针对严蔚敏教授的经典教材《数据结构》中的相关内容,特别是关于最短路径算法的实现进行了深入探讨。在这里,我们将详细解析这个主题,并讨论一些相关的算法。 1. **数据结构基础...
k-Shortest Paths(k-最短路径)则是在这个基础上进一步扩展,不仅求解一条最短路径,而是找出前k条最短路径。 1. Dijkstra算法:Dijkstra算法是最基本的单源最短路径算法,由荷兰计算机科学家艾兹格·迪科斯彻提出...
在IT领域,"查找关键路径(shortest path)"是一个重要的概念,主要应用于项目管理、网络路由优化、图形算法以及各种有向无环图(DAG)分析。关键路径是指在一个项目中,从开始到结束的最长路径,这个路径决定了项目的...
The shortest path problem is one of the most fundamental problems in network optimization. This paper is concerned with shortest path problems in non-deterministic environment, in which some arcs have...
这个名为"ShortestPath_DIJ.rar_shortestpath"的压缩包包含了一个实现迪杰斯特拉(Dijkstra)算法的源代码——ShortestPath_DIJ.cpp,以及一个可能是用来记录资源来源的文本文件——www.pudn.com.txt。 迪杰斯特拉...
在处理大量网络数据时,寻找两点之间的最短路径是一个重要而具有挑战性的任务。网络中每个节点之间的连接关系复杂,直接计算不仅效率低下,而且在大规模网络中是不可行的。为了解决这个问题,研究人员提出了通过宽度...
基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径...
Status ShortestPath_Floyd(Graph &G,Distance &D,Path &P,Number &N) {int i,j,k; int s,t; if(G.kind==DG||G.kind==UDG) return ERROR; for(j=0;j;j++) for(k=0;k;k++) {D[j][k]=G.arcs[j][k]; P[j][k][0]=j...
在给出的"ShortestPath.mexw64"文件中,实现的可能是MATLAB环境下的Dijkstra算法,其文件后缀".mexw64"表明这可能是一个编译后的MATLAB可执行文件,用于提高计算性能。这类文件通常是由MATLAB的MEX接口编译的C/C++...
sqrt((x2-x0)^2+(y2-y0)^2)-sqrt((x1-x0)^2+(y1-y0)^2)=t
总之,"the-shortest-way.rar"提供的资源对于理解并实践GIS中的最短路径分析具有重要意义。无论是学习者还是专业从业者,都能从中获益,提升对网络优化问题的解决能力。通过深入研究这些材料,可以更好地掌握这一...