zoukankan      html  css  js  c++  java
  • leetcode 5 最长回文子串

    题目

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

    示例 1:
    输入: "babad"
    输出: "bab"
    注意: "aba"也是一个有效答案。
    示例 2:
    输入: "cbbd"
    输出: "bb"

    解题思路

    利用动态规划来解决问题,从字符串尾开始遍历,核心思想,若dp[i][j]是回文串,则dp[i+1][j-1]也是回文串,因此,"dp[i+1][j-1]是回文串"&&s[i] == s[j] => "dp[i][j]是回文串"。若从头开始遍历,则会出现还未判断dp[i+1][j-1]却先判断dp[i][j]的情况

    完整遍历过程例子:

    串:abcba
    
    过程:
    
        a
       b
       ba
      c
      cb
      cba
     b
     bc
     bcb
     bcba
    a
    ab
    abc
    abcb
    abcba
    

    代码:

    string fun(string s){
    	int i,j,l = 0,r = 0,ans = 1,len = s.length();
    	for(i = 0; i < len; i++)
    		dp[i][i] = 1;                //初始化
    	for(i = len-1; i >= 0; i--){
    		for(j = i+1; j < len; j++){
    			if(s[i] == s[j]){
    				if(i == j-1){
    					dp[i][j] = 1;
    				}
    				else{
    					dp[i][j] = dp[i+1][j-1];
    				}
    			}
    			if(dp[i][j] == 1 && j-i+1 > ans){
    				l = i;
    				r = j;
    				ans = j-i+1;
    			}
    		}
    	}
    	return s.substr(l,ans);
    }
    
  • 相关阅读:
    JDBC的简单笔记
    javascript学习笔记二
    javascript学习一、js的初步了解
    css的简单学习笔记
    c++ 拷贝构造函数
    C++ new delete
    c++ 析构函数
    c++成员初始化和构造函数
    C++ 类和对象浅解
    c++ constexpr
  • 原文地址:https://www.cnblogs.com/Mrwho1/p/9209285.html
Copyright © 2011-2022 走看看