Longest Palindromic Substring --leetcode 数据结构第五题
2016-06-01 18:07
309 查看
原题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Subscribe to see which companies asked this question
题目的意思是给定字符串,找出字符串中的最长的回文并输出。
第一种解决思路:暴力穷举法,这种方法虽然能找出,但是效率比较低,提交的时候会报超时。 有人会问为什么第二个for循环for (int j = i + resultStr.length(); j < s.length() + 1; j++) {这么写,这是因为想增加步长来减少运算量,因为小于这个长度的字符串就算是回文,也不是我们想要的结果。
第二种:
虽然看起来很长,但是却能通过。
Subscribe to see which companies asked this question
题目的意思是给定字符串,找出字符串中的最长的回文并输出。
第一种解决思路:暴力穷举法,这种方法虽然能找出,但是效率比较低,提交的时候会报超时。 有人会问为什么第二个for循环for (int j = i + resultStr.length(); j < s.length() + 1; j++) {这么写,这是因为想增加步长来减少运算量,因为小于这个长度的字符串就算是回文,也不是我们想要的结果。
public String longestPalindrome(String s) { String resultStr = ""; for (int i = 0; i < s.length(); i++) { for (int j = i + resultStr.length(); j < s.length() + 1; j++) { String temp=s.substring(i, j); StringBuffer tempStr = new StringBuffer(temp); tempStr = tempStr.reverse(); if (temp.equals(tempStr.toString())) { if(tempStr.length()>resultStr.length()){ resultStr=tempStr.toString(); } } } } return resultStr; }
第二种:
public String longestPalindrome(String s) { if (s.isEmpty()) { return null; } if (s.length() == 1) { return s; } String longest = s.substring(0, 1); for (int i = 0; i < s.length(); i++) { // get longest palindrome with center of i String tmp = helper(s, i, i); if (tmp.length() > longest.length()) { longest = tmp; } // get longest palindrome with center of i, i+1 tmp = helper(s, i, i + 1); if (tmp.length() > longest.length()) { longest = tmp; } } return longest; } // Given a center, either one letter or two letter, // Find longest palindrome public static String helper(String s, int begin, int end) { while (begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)) { begin--; end++; } String subS = s.substring(begin + 1, end); return subS; }
虽然看起来很长,但是却能通过。
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)