给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

public String longestPalindrome(String s) {
         if(s == null||s.length()==0){
            return s;
        }
        String res = "";
        int max=0;
        boolean[][] dp = new boolean[s.length()][s.length()];
        //res=s.substring(0, 1);
        for(int j = 0;j < s.length();j++){
            for(int i=0;i<=j;i++){
                dp[i][j] = (s.charAt(i) == s.charAt(j)) && (((j - i + 1) <= 2) || dp[i+1][j-1]);
                if (dp[i][j] && (j-i+1)>max){
                    max = j-i+1;
                    res = s.substring(i, j+1);

                }
            }
        }
        return res;
    }
}

原文地址:https://www.cnblogs.com/q-1993/p/10765668.html

时间: 2024-10-10 09:33:22

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。的相关文章

Given a string, find the length of the longest substring without repeating characters.(给定一个字符串,找到最长的子串的长度,这个子串不存在重复的字符。 )

Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with the length of 1.

给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。

1. 给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1. sample: 输入:"abcdefcba" 输出:3 解法:先遍历字符串,用一个map记录每个字符出现的次数,再次遍历字符串,找到第一个只出现一次的字符,复杂度为O(n). #include <iostream> #include <string> #include <cstring> #include <map> using namespace std; int

Longest Palindromic Substring - 字符串中最长的回文字段

需求: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. 如果一个字符串从左向右写和从右向左写是一样的,这样的字符串就叫做palindromic string 判断回文数,中间开花.定一个中心,向两边散

给定一个字符串,找到包含该字符串所有字符的最短子串

这题是豌豆荚二面的一个算法题,和leetcode的某些题目类似.其思路是这样的 首先遍历一次字符串,求出字符串不同字符的数目 为每一个字符保存一个列表,记录该字符在字符串中出现的索引:设置待求字符串为s(初始值为源串),记录待求字符串的首字母pStart(初始值为0) 重新遍历字符串,更新没有遍历的字符的数目,更新当前字符对应的索引列表.如果pStart处字符对应的列表长度大于1,则从索引列表中移出pStart,并将pStart加1,并重复该过程.如果剩余字符数目为0时,且子字符串[pStart

找出字符串中的最长的回文子串

1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int maxLoc=0; 5 int maxNum=1; 6 const int stringSize=s.size(); 7 if(stringSize==1){ 8 return s; 9 } 10 11 for(int i=1; i!= 2*stringSize-1-1;++i){ 12 int a, b; 13 int num=1; 14 if(i

求字符串中的最长回文子串

题目:给定一个字符串S,求其中的最长的回文子串! 思路:采用动态规划的思想 /** * author :wxg */ #include<iostream> #include<string> using namespace std; /*** 动态规划的思想:字符串 S,以及 f(i,j)表示子字符串 S[i,j] 是否为回文,如果是,f(i,j)=true,否则为 false: ----- true ,i == j f (i, j) = ---- S[i] = S[j] ,j ==

最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现

首先还是先解释一下什么是回文串:就是从左到右或者从右到左读,都是同样的字符串.比如:上海自来水来自海上,bob等等. 那么什么又是找出最长回文串呢? 例如:字符串abcdefedcfggggggfc,其中efe,defed,cdefedc,gg,ggg,gggg,ggggg,gggggg,fggggggf,cfggggggfc都是回文串,左右完全一样. 这其中,有最短的gg,最长的cfggggggfc,还有其他长度的.忽略长度为1的.毕竟一个字符的都算回文了. 那么,找出最长的,就是找出这个cf

最长回文子串算法(字符串处理问题+多种方法解决)【转载】

转载地址:http://blog.csdn.net/kangroger/article/details/37742639 回文是指正着读和倒着读,结果一些样,比如abcba或abba. 题目是要在一个字符串中要到最长的回文子串. 1.暴力法 最容易想到的就是暴力破解,求出每一个子串,之后判断是不是回文,找到最长的那个. 求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3). string findLongestPalindrome(stri

Manarcher 求 字符串 的最长回文子串 【记录】

声明:这里只写出了实现过程.想学习Manacher的可以看下这里给出的实现过程,算法涉及的一些原理推荐个博客. 感觉讲的很细 引子:给定一个字符串s,让你求出最长的回文子串的长度. 算法大致实现过程: 一:为了排除回文字符串长度奇或偶的影响.先在每两个字符之间插入一个原字符串没有出现过的字符(这里就用#)构成新串str.设p[i] 为以str[i]字符为中心的回文字符串的最大半径.则新串中以str[i]为中心的回文串长度为p[i]-1. 二:字符串从前到后求p[]数组.(不要问为什么从前到后)