LeetCode——5最长回文子串
2019-05-18 17:32
281 查看
package exercise; /** * 给定一个字符串s,找到s中最长的回文子串。你可以假设 s的最大长度为1000。 * * 示例1: 输入: “babad” 输出: “bab” 注意: “aba”也是一个有效答案。 * * 示例2: 输入: “cbbd” 输出: “bb” * * 思路:利用字符串的中间位,比较中间位的左右两边的字符是否相同,找到最大的长度 * * 让中间位k从0开始,i = k-1或k,j = k+1,比较i和j的值, * * 如果不同,k++;如果相同,i--,j++继续比较,直到二者不同时,最大长度是j-i-1 */ public class Test { public static String maxPalindrom(String s) { int i = 0;// 定义三个指针,初始化为0 int j = 0; int k = 0; int mid = 0; int len = 0;// 每次比较,得到的回文字符串的长度,初始化为0 int max = 1;// 初始化最长回文字符串的长度,初始值为1 // 如果s的长度是偶 数 while (s.length() % 2 == 0 && k < s.length() - 1) { i = k; j = k + 1; while (s.charAt(i) == s.charAt(j) && i >= 0 && j < s.length()) {// 如果i和j对应的字符相等,则继续比较 i--; j++; } // 如果不相等,记录下现在比较的回文字符的长度,与max比较,并记录下现在的k,以便以后取回文字串 len = j - i - 1; if (len > max) { max = len; mid = k; } k++; } // 如果s的长度是奇数 k = 1; while (s.length() % 2 != 0 && k < s.length() - 1) { i = k - 1; j = k + 1; while (s.charAt(i) == s.charAt(j) && i >= 0 && j < s.length()) {// 如果i和j对应的字符相等,则继续比较 i--; j++; } // 如果不相等,记录下现在比较的回文字符的长度,与max比较,并记录下现在的k,以便以后取回文字串 len = j - i - 1; if (len > max) { max = len; mid = k; } k++; } //取子串的时候一定要注意子串的下标 if (max % 2 == 0) {// 取最长回文子串,如果是偶数 return s.substring(mid - max / 2 + 1, mid + max / 2 + 1); } else {//如果是奇数 return s.substring(mid - max / 2, mid + max / 2 + 1); } } public static void main(String[] args) { String s = "cbba"; String res = maxPalindrom(s); System.out.println("最大回文子串是" + res); } }
相关文章推荐
- leetcode5-Longest Palindromic Substring(最长回文子串)
- leetcode练习题5--最长回文子串
- LeetCode 5 Longest Palindromic Substring(最长回文子串,暴力剪枝/DP/曼彻斯特算法)
- LeetCode--5.最长回文子串(Longest Palindromic Substring)
- LeetCode 5. 最长回文子串
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
- Leetcode: 5 Longest Palindromic Substring 最长回文子串
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
- leetcode之路--leetcode 5. 最长回文子串(1)
- LeetCode[5] 最长的回文子串
- leetcode 005 最长回文子串
- [LeetCode系列] 最长回文子串问题
- leetcode Longest Palindromic Substring最长回文子串
- LeetCode——5. 最长回文子串
- LeetCode---5. Longest Palindromic Substring(最长回文子串)
- leetcode解题之5. Longest Palindromic Substring Java版(最长回文子串)
- 最长回文子串(LeetCode)
- LeetCode-Longest Palindromic Substring-最长回文子串-Manacher
- Longest Palindromic Substring [LeetCode] 最长回文子串