-
最长回文字符串 java_LeetCode 第五题 最长的回文字符串 (JAVA)
2021-02-26 09:54:40Longest Palindromic Substring简介:字符串中最长的回文字符串回文字符串:中心对称的字符串 ,如 mom,noon问题详解:给定一个字符串s,寻找字符串中最长的回文字符串,假设字符串s长度最长为1000.举例:1:输入: ...Longest Palindromic Substring
简介:字符串中最长的回文字符串
回文字符串:中心对称的字符串 ,如 mom,noon
问题详解:
给定一个字符串s,寻找字符串中最长的回文字符串,假设字符串s长度最长为1000.
举例:
1:
输入: “babad”
输出: “bab”
注: “aba” 也是一种答案.
2:
输入: “cbbd”
输出: “bb”
官方实现 : Expand Around Center
我们可以从字符串中心寻找回文字符串,例如"aba"的中心为’b’,"baab"的中心为两个a中间,所以分两种情况考虑,一种是中心为i,另一种是i和i+1,这里我们需要注意的是String里的方法substring(index start,index end),第二个s是小写的,并且是从start开始一直到end结尾但不包含end索引处的字符,所以我们要end+1
复杂度分析
时间复杂度分析 : O(n^2).
空间复杂度 : O(1).
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海
-
Java基础算法之找出一段字符串中所有回文串、最长的回文串以及最长回文串长度
2020-12-01 09:36:01Java基础算法之找出一段字符串中所有回文串、最长的回文串以及最长回文串长度 回文的含义是:字符串从左向右看和从右向左看是相同的,例如:abba,1234321。 单一字符亦是回文串 package ...Java基础算法之找出一段字符串中所有回文串、最长的回文串以及最长回文串长度
- 回文的含义是:字符串从左向右看和从右向左看是相同的,例如:abba,1234321。
- 单一字符亦是回文串
package com.zhaowl.interview.base; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 获取最长回文串 * 回文的含义是:子串从左向右看和从右向左看是相同的,例如:abba,1234321。 * 注意:单一字符亦是回文串 * * @author : Create by 半路勇者 at 2020/11/24 16:03 */ @Slf4j public class LongestPalindromicSubstring { /** * 判断字符串是否是回文串 * * @param string 字符串 * @return 是否是回文串 */ public static boolean isPalindromic(String string) { return string.equalsIgnoreCase(new StringBuffer(string).reverse().toString()); // 用如下方法判断是否是回文串,则会忽略掉单一字符 /*int length = string.length(); boolean bool = false; for (int i = 0; i < length / 2; i++) { bool = (string.charAt(i) == string.charAt(length - i - 1)); if (!bool) { break; } } return bool;*/ } /** * 一段一段的截取,判断是否是回文串 * * @param string 字符串 * @return 最长回文串以及长度 */ public static Map<String, Object> getLongestPalindromic(String string) { Map<String, Object> map = new HashMap<>(); // 所有回文串集合 List<String> strings = new ArrayList<>(); // 如果字符串为空,返回空 if (string == null || string.equals("") || string.length() == 0) { return null; } // 保存最长回文串 String maxStr = null; // 保存回文串长度 int length = 0; // 保存最长回文串长度 int maxLength = 0; for (int i = 0; i < string.length(); i++) { /* * 这里之所以设置j <= string.length(),是避免字符串本身就是一个回文串,原因如下 * substring(beginIndex, endIndex) * endIndex:输入的数值减1 */ for (int j = i + 1; j <= string.length(); j++) { String sub = string.substring(i, j); // 找到回文串则缓存该串长度,用于比较 if (isPalindromic(sub)) { strings.add(sub); length = sub.length(); } // 如果该串长度大于上一个回文串,则最大长度设置为当前回文串长度,并缓存当前回文串为最大长度回文串 if (length > maxLength) { maxLength = length; maxStr = sub; } // 回文串长度初始化为0,并进行下一次循环截取 length = 0; } } map.put("maxLength", maxLength); map.put("maxStr", maxStr); map.put("strings", strings); return map; } public static void main(String[] args) { String string = "1234321"; Map<String, Object> map = getLongestPalindromic(string); // 7 log.info("最长回文串长度:" + map.get("maxLength")); // 1234321 log.info("最长回文字符串:" + map.get("maxStr")); // [1, 1234321, 2, 23432, 3, 343, 4, 3, 2, 1] log.info("所有回文串:" + map.get("strings")); } }
-
字符串的字串中最长的回文的子串的长度
2019-12-28 21:14:58对于这样一个具有魔力的回文串,爱好广泛的Eddy当然不会放过,他研究发现如果给他两个字符串s和t,然后把s和t交叉组成一个字符串,那么他可以马上知道在这个字符串的字串中最长的回文的子串的长度。现在举个例子:... -
最长回文子串python_python经典算法题:求字符串中最长的回文子串
2020-12-04 11:29:38题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”...题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
-
leetcode之最长的回文子串
2020-08-10 11:31:01题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 思路:...题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”思路:中心扩散法——遍历每一个索引,以这个索引为中心,利用“回文串”中心对称的特点,往两边扩散,看最多能扩散多远。
在这里需要注意一个细节:回文串在长度为奇数和偶数的时候,“回文中心”的形式是不一样的。
1、奇数回文串的“中心”是一个具体的字符,例如:回文串“aba”的中心是字符“b”;
2、偶数回文串的“中心”是位于中间的那两个字符,如:回文串“abba”的中心是两个“bb”;
Python解法:class Solution: def longestPalindrome(self, s: str) -> str: size = len(s) if size < 2: return s # 至少是 1 max_len = 1 res = s[0] for i in range(size): palindrome_odd, odd_len = self.__center_spread(s, size, i, i) palindrome_even, even_len = self.__center_spread(s, size, i, i + 1) # 当前找到的最长回文子串 cur_max_sub = palindrome_odd if odd_len >= even_len else palindrome_even if len(cur_max_sub) > max_len: max_len = len(cur_max_sub) res = cur_max_sub return res def __center_spread(self, s, size, left, right): """ left = right 的时候,此时回文中心是一个字符,回文串的长度是奇数 right = left + 1 的时候,此时回文中心是一个空隙,回文串的长度是偶数 """ i = left j = right while i >= 0 and j < size and s[i] == s[j]: i -= 1 j += 1 return s[i + 1:j], j - i - 1
java解法:
public class Solution { public String longestPalindrome(String s) { int len = s.length(); if (len < 2) { return s; } int maxLen = 1; String res = s.substring(0, 1); // 中心位置枚举到 len - 2 即可 for (int i = 0; i < len - 1; i++) { String oddStr = centerSpread(s, i, i); String evenStr = centerSpread(s, i, i + 1); String maxLenStr = oddStr.length() > evenStr.length() ? oddStr : evenStr; if (maxLenStr.length() > maxLen) { maxLen = maxLenStr.length(); res = maxLenStr; } } return res; } private String centerSpread(String s, int left, int right) { // left = right 的时候,此时回文中心是一个字符,回文串的长度是奇数 // right = left + 1 的时候,此时回文中心是一个空隙,回文串的长度是偶数 int len = s.length(); int i = left; int j = right; while (i >= 0 && j < len) { if (s.charAt(i) == s.charAt(j)) { i--; j++; } else { break; } } // 这里要小心,跳出 while 循环时,恰好满足 s.charAt(i) != s.charAt(j),因此不能取 i,不能取 j return s.substring(i + 1, j); } }
-
python 字符串最长回文_python经典算法题:求字符串中最长的回文子串
2020-12-10 16:53:14题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”... -
5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串
2021-03-16 23:06:34给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 示例 3: 输入:s = “a” 输出:“a... -
1.3.3 最长的回文(Calf Flac) Java实现
2020-10-08 01:57:30你的工作就是去这些牛制造的奇观中寻找最长的回文. 寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),只用考虑字母 ‘A’-‘Z’和’a’-‘z’. 要你寻找的最长的回文的文章是一个不超过 20,... -
求字符串中最长的回文串
2019-09-11 11:06:20题目:给定一个只包含字母的字符串,计算该字符串的最长回文串长度。 提示:回文串是指正着读和反着读都是一样的字符串。 思路1:这一题是比较简单的,直接用...取这些最长回文串的长度就是整个字符串中最长的回文串... -
最长的回文子串
2020-06-08 18:50:18最长回文子串 解题思路 -
USACO 1.3.3 最长的回文 (Calf Flac)Java实现
2020-10-08 02:27:34你的工作就是去这些牛制造的奇观中寻找最长的回文. 寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),只用考虑字母 ‘A’-‘Z’和’a’-‘z’. 要你寻找的最长的回文的文章是一个不超过 20,... -
LeetCode刻意练习17--最长的回文子串
2020-03-17 20:14:04给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 思路: 我们寻找所有奇数长度和偶数长度的回文子串,... -
Calf Flac最长的回文
2011-09-13 21:40:09Calf Flac最长的回文 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最 棒的回文. 你的工作就是去这些牛制造的奇观中寻找最长的回文. 寻找回文时不用理睬那些标点... -
找出字符串中的最长的回文子串
2019-09-24 10:17:31回文子串是指从前往后和从后往前一致的对称的字符...而,我们的程序目的是在一个字符串中, 找出,长度最长的回文字符串,可以按照上面的逆向思路来寻找,即,针对每一个字符,或者空格,寻找是否存在以其为中心的回... -
最长回文 HDU - 3068 (manacher求最长的回文串)
2020-08-17 11:22:22给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S ... -
洛谷 P1210 [USACO1.3]最长的回文 Calf Flac
2020-02-29 12:20:51P1210 [USACO1.3]最长的回文 Calf Flac https://www.luogu.com.cn/problem/P1210 思路: 暴力每个字符,以每个字符为中心往两边扩展求最长的回文串的长度。详细看代码。 Code: #include <bits/stdc++.h> ... -
JAVA 判断一个字符串中最长的回文串
2020-02-28 21:33:12在一个指定的字符串中,查找出最长的回文字符串。例如:abcddcdd中出现的最长的回文串就是:cddc。 实现思路: (1)从第一个字符开始,同时从左边和右边取一个字符进行比较,如果相同则当前左边+中间+右边组成的... -
面试题——查找字符串中最长的回文子串
2019-08-14 23:34:28给定一个字符串 s,找到 s 中最长的回文子串。 -
c++ string 回文串_C++查找字符串中最长的回文子串,并返回长度
2021-03-07 16:46:12时间:2020-03-13概述:回文字符串 查找字符串C++找到字符串中最长的回文子串,并返回其长度,算法思想:本算法的一次判断每个字符的前后回文的长度,选取最大的那个输出;其中,start记录最长字符串的初始位置:... -
求字符串中最长的回文串 java实现
2018-03-22 21:23:20也很粗糙,仔细想想,回文串的特点是从中间往两边是对称的,那么我们可以直接遍历字符串中的每一个位置,求出以每一个位置为中心的回文串最长是多长,取这些最长回文串的长度就是整个字符串中最长的回文串的长度了,... -
最长回文子串问题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
2019-07-21 12:14:31给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 题目分析 其实,这道题的... -
20170827_从字符串中返回最长的回文子串
2017-08-27 14:43:2920170827_从字符串中返回最长的回文子串 -
输出任意字符串中最长的回文长度
2017-09-26 09:21:52如题,查找字符串中最长的回文,并输出该回文的长度。 例如: 输入:12ABBA 输出:4 输入:51233214 输出:6 #include<string> #include<iostream> #include <... -
LeetCode 第五题 最长的回文字符串 (JAVA)
2019-04-10 09:32:28字符串中最长的回文字符串 回文字符串:中心对称的字符串 如 mom,noon Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is... -
字符串篇(python)—字符串里最长的回文字符串
2020-12-05 10:34:57字符串里最长的回文字符串 回文字符串:一个字符串从左到右与从右到左遍历得到的序列是相同的 例如 abcaba是回文字符串 abcab不是回文字符串 abcdefgfedxyz——>defgfed 暴力破解法 """ 下面字串中不是回文... -
数据结构: 求字符串中最长的回文字符串
2019-01-06 11:08:30求字符串中最长的回文字符串 描述 最长回文子串问题:给定一个字符串,求它的最长回文子串长度 LeetCode 5 暴力枚举 备忘录法 动态规划 分析 设置一个二维的数组f. f[i][j] 表示区间 [i,j] 是否为回文串.则状态... -
Leetcode-字符串问题--最长的回文字符串
2017-07-17 15:20:511. 寻找最长的回文字符串 1)动态规划问题 利用递归和动态规划来求解 f()为当前字符串的最长的回文字符串 f(l,r)=max_size(f(l+1,r),f(l,r-1)) 然后利用递归来求解。 缺点:该算法复杂度较高,实际会需要较长... -
求最长的回文字符串
2011-09-21 16:28:01程序:输入:一行字符串,输出:最长的回文字符的长度以及把它们给输出来。 如: 输入:1596156432111234 输出:6 432111234 回文的性质 首先先把题目撇开,单说回文数的性质,如abcba是一个... -
找出给出的字符串S中最长的回文子串java实现
2020-04-19 22:20:07给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 思路:分别从最... -
算法5:给定一个字符串S 找到字符串S中最长的回文子串
2020-05-07 16:11:26给定一个字符串S 找到字符串S中最长的回文子串 package com.jy.leetcode; /** * @author t * @version 1.0 * @date 2020/5/7 15:20 * @company juya */ public class LettCode5 { //给定一个字符串S 找到字符...