回文串

leetcode题目5.最长回文子串

主宰稳场 提交于 2019-11-28 18:36:48
题目描述: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 解法一:扩展中心,中心开花 我们知道回文串一定是对称的,所以我们可以每次循环选择一个中心,进行左右扩展,判断左右字符是否相等即可。 由于存在奇数的字符串和偶数的字符串,所以我们需要从一个字符开始扩展,或者从两个字符之间开始扩展,所以总共有 n+n-1 个中心。 class Solution { public static String longestPalindrome(String s) { if (s == null || s.length() == 0) { return ""; } //记录回文串的开始位置 int start = 0; //记录回文串的结束位置 int end = 0; //记录中间得到的回文串的长度 int maxLen = 0; for (int i = 0; i < s.length(); i++) { //从n+n-1个中心点开始向外扩展 int len1 = getTheLengthOfPalindrome(s, i, i); int len2 = getTheLengthOfPalindrome(s

DP回文子串

守給你的承諾、 提交于 2019-11-28 01:16:20
题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 ("回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。) 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 可用C++,Java,C#实现相关代码逻辑 输入描述: 输入一个字符串S 例如“aabcb”(1 <= |S| <= 50), |S|表示字符串S的长度。 输出描述: 符合条件的字符串有"a","a","aa","b","c","b","bcb" 所以答案:7 示例1 输入 复制 aabcb #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; bool Judge(string& A){ string B = A; reverse(B.begin(),B.end()); return A == B; } int main() { string Input; cin >> Input; int Length = Input.length(); vector<int> dp(Length,0); dp[0] = 1; for(int i = 1;i < Length;i ++){ dp[i] =