Longest Palindromic String

来源:Leetcode Problem Set - Algorithm Problem5

题目描述Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

解题思路:使用动态规划的思想,建立一个n^2规模的布尔数组dp,dp[i][j]表示从i到j的连通性,在题中是从i到j的字符串是否是回文串,根据回文的定义,若s[i] != s[j]则dp[i][j]一定为假,否则dp[i][j]的真假取决于dp[i+1][j-1]

代码解答:

class Solution {
public:
    string longestPalindrome(string s) {
        int size = 1000;
    	bool dp[size][size];
    	if (s.length() == 0) {
    		return "";
    	}
    	if (s.length() == 1) {
    		return s;
    	}
    	int i,j;
    	for (i = 0; i < s.length(); i++) {
    		for (j = 0; j < s.length(); j++) {
    			if (i >= j) dp[i][j] = true; // i=j代表只有一个字符的串,可以设置为回文,当i>j是空串,可设置为回文,其他情况都设置为不是回文
    			else dp[i][j] = false;
    		}
    	}
    	int k;
    	int maxLen = 1;
    	int rf = 0, rt = 0;
    	for (k = 1; k < s.length(); k++) {
    		for (i = 0; k+i < s.length(); i++) {
    			j = i + k;
    			if (s[i] != s[j]) dp[i][j] = false;
    			else {
    				dp[i][j] = dp[i+1][j-1];
    				if (dp[i][j]) {
    					if (k+1 > maxLen) {
    						maxLen = k + 1;
    						rf = i;
    						rt = j;
    					}
    				}
    			}
    		}
    	}
    	return s.substr(rf, rt - rf + 1);
    }
};



    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值