Leetcode: Shortest Palindrome
2015-12-17 14:43
363 查看
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".
本题最简单的思路是从后往前判断子串是否是回文串,然后把后面的弄到前面即可,不过这样仅仅能擦边通过测试
Big case 会MLE:
public class Solution { public String shortestPalindrome(String s) { //if (s==null || s.length()==0) return ""; boolean[][] dict = new boolean[s.length()][s.length()]; getdict(s, dict); int i = 0; for (i=s.length()-1; i>=0; i--) { if (dict[0][i]) break; } StringBuffer res = new StringBuffer(s.substring(i+1)); res = res.reverse(); res.append(s); return res.toString(); } public void getdict(String s, boolean[][] dict) { for (int i=s.length()-1; i>=0; i--) { for (int j=i; j<s.length(); j++) { if (s.charAt(i)==s.charAt(j) && (j-i<=2 || dict[i+1][j-1])) dict[i][j] = true; } } } }
Big case 会TLE:
public String shortestPalindrome(String s) { for(int i=s.length();i>=1;i--) if(isPalindrome(s.substring(0, i))) return new StringBuilder(s.substring(i)).reverse()+s; return ""; } static boolean isPalindrome(String s){ int left=0,right=s.length()-1; while(left<right) if(s.charAt(left++)!=s.charAt(right--)) return false; return true; }
KMP介绍:http://kb.cnblogs.com/page/176818/
实现:/article/6566091.html
本题KMP:(未深究)参考:http://blog.csdn.net/pointbreak1/article/details/45931551
public class Solution { public String shortestPalindrome(String s) { String result = ""; if(s.length() == 0) return result; int[] prefix = new int[s.length() * 2]; String mirror = s + new StringBuilder(s).reverse().toString(); for(int i = 1; i < s.length() * 2; i++) { int j = prefix[i-1]; while(mirror.charAt(j) != mirror.charAt(i) && j > 0) j = prefix[j-1]; if(mirror.charAt(i) == mirror.charAt(j)) prefix[i] = j + 1; else prefix[i] = 0; } int count = s.length() - prefix[s.length() * 2 -1]; result = new StringBuilder(s.substring(s.length()-count, s.length())).reverse().toString() + s; return result; } }
相关文章推荐
- PhpForm表单相关的超全局变量操作
- initWithCoder方法中不能设置子对象控件属性
- redis sentinel 主从切换(failover)解决方案,详细配置
- Android UI NOTE
- jq 弹出层
- Delphi ClientDataSet复制记录
- ubuntu 提升性能的几个软件
- bootstrap菜单、按钮及导航学习笔记5-3
- Java Netty简介
- Android 尺寸单位转换和屏幕适配相关
- spring三层示例controller层,service层示例,dao层示例
- anchors
- html5学习笔记(1)-新标签
- [第三方]AFNetWorking3.0网络框架使用方法
- 百度推送代码备份
- 查询附近的人SQL
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- Spring MVC学习总结(2)——Spring MVC常用注解说明
- android常用应用的包名和startAcitivity名