`
hcx2013
  • 浏览: 88759 次
社区版块
存档分类
最新评论

Shortest Palindrome

 
阅读更多

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;
	}
}

 

分享到:
评论

相关推荐

    LeetCode最全代码

    ...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....|-----|---------------- | --------------- |...

    leetcode添加元素使和等于-njuee_LeetCode_Solutions:本仓库主要记录平时遇到的一些编程问题、算法、思路

    Palindrome,为了满足时间复杂度要求,这里求回文串使用Manacher算法 2019/07/11 新增 224. Basic Calculator,求表达式的值,一般思路是把常规的“中缀表达式”转换为“逆波兰式”(后缀表达式),然后计算(用栈很方便) ...

    LeetCode:LeetCode上一些算法的解答

    3. **栈和队列**:栈(Last In First Out, LIFO)和队列(First In First Out, FIFO)是两种基础数据结构,常见题目如"有效的括号"(Valid Parentheses)用栈来检查括号匹配,"最短回文串"(Shortest Palindrome)则...

    k shortest Path C++

    "K Shortest Path"(K条最短路径)是寻找图中两个顶点间多于一条最短路径的问题。这个任务通常用于在网络流量管理、交通规划以及分布式系统中。这里我们主要讨论如何用C++实现K Shortest Path算法。 首先,我们来看...

    matlab k shortest path

    "Matlab k Shortest Path" 是一个专门用于寻找图中具有最少成本的k条路径的工具。在这个项目中,我们可以看到四个核心文件:`kShortestPath.m`、`dijkstra.m`、`TestKShortestPath.m` 和 `license.txt`。 1. **...

    ShortestPath

    **标题:ShortestPath** **描述:**在计算机科学领域,单源最短路径问题是一个经典问题,旨在寻找网络图中从一个特定源节点到所有其他节点的最短路径。这里提到的“ShortestPath”是指应用了贪心算法Dijkstra(迪杰...

    11 ShortestPath.zip

    在“11 ShortestPath.zip”这个压缩包中,我们可以预见到一系列关于求解最短路径问题的算法实现。 1. 最短路径问题概述: 最短路径问题寻找的是网络中两个节点之间的最短路径,这里的“最短”通常是指路径上的边权...

    11 ShortestPath.rar

    本资源"11 ShortestPath.rar"显然是针对严蔚敏教授的经典教材《数据结构》中的相关内容,特别是关于最短路径算法的实现进行了深入探讨。在这里,我们将详细解析这个主题,并讨论一些相关的算法。 1. **数据结构基础...

    最短路径算法实现 k-shortest-paths

    k-Shortest Paths(k-最短路径)则是在这个基础上进一步扩展,不仅求解一条最短路径,而是找出前k条最短路径。 1. Dijkstra算法:Dijkstra算法是最基本的单源最短路径算法,由荷兰计算机科学家艾兹格·迪科斯彻提出...

    查找关键路径(shortest path)

    在IT领域,"查找关键路径(shortest path)"是一个重要的概念,主要应用于项目管理、网络路由优化、图形算法以及各种有向无环图(DAG)分析。关键路径是指在一个项目中,从开始到结束的最长路径,这个路径决定了项目的...

    Shortest path problem of uncertain random network

    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

    这个名为"ShortestPath_DIJ.rar_shortestpath"的压缩包包含了一个实现迪杰斯特拉(Dijkstra)算法的源代码——ShortestPath_DIJ.cpp,以及一个可能是用来记录资源来源的文本文件——www.pudn.com.txt。 迪杰斯特拉...

    Fast exact shortest-path distance queries on large networks

    在处理大量网络数据时,寻找两点之间的最短路径是一个重要而具有挑战性的任务。网络中每个节点之间的连接关系复杂,直接计算不仅效率低下,而且在大规模网络中是不可行的。为了解决这个问题,研究人员提出了通过宽度...

    基于java的开发源码-最短路径算法实现 k-shortest-paths.zip

    基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径算法实现 k-shortest-paths.zip 基于java的开发源码-最短路径...

    C++代码ShortestPath_Floyd

    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.rar_shortestpath

    在给出的"ShortestPath.mexw64"文件中,实现的可能是MATLAB环境下的Dijkstra算法,其文件后缀".mexw64"表明这可能是一个编译后的MATLAB可执行文件,用于提高计算性能。这类文件通常是由MATLAB的MEX接口编译的C/C++...

    shortest path faster algorithm

    sqrt((x2-x0)^2+(y2-y0)^2)-sqrt((x1-x0)^2+(y1-y0)^2)=t

    the-shortest-way.rar_SHORTEST-PATHS_gis_gis最短路径_shortest_网络分析

    总之,"the-shortest-way.rar"提供的资源对于理解并实践GIS中的最短路径分析具有重要意义。无论是学习者还是专业从业者,都能从中获益,提升对网络优化问题的解决能力。通过深入研究这些材料,可以更好地掌握这一...

Global site tag (gtag.js) - Google Analytics