Longest Palindromic Substring leetcode

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

Example:

Input: “babad”

Output: “bab”

Note: “aba” is also a valid answer.
Example:

Input: “cbbd”

Output: “bb”
思路
题目就就做最长的回文子串,题目没有说清楚的是当一个串的最长回文子串长度为1时,输出串的第一个字符。
代码思路解析: 用start,end来标记每一次循环时一个子串的起始和终止索引,令i= start, j = end,然后逐个字符比较,符合回文条件的子串用一个字符串str保存起来并记录最长的回文串,注意当记录的最长子串大于end-start+1时,直接退出当前一层的循环(不加这个限制,程序会超时)
题目边界条件注意 : 串s长度 < 2时 直接return s;
代码

string find(string s){
    if(s.size() < 2) return s; //串长度小于2return s; 
    int i,j,len,start,end;
    int maxLen = 1;
    len = s.size();
    string str = s.substr(0,1);  //若该串的最长回文串长度为1,返回第一个字符 
    for(start = 0; start < len - 1; start++){   //记录子串的开始位置 
        for(end = len-1; end > start ; end--){  //记录子串的结束位置 
            if(end-start+1 <= maxLen) break;    //当找到的子串maxLen >= 子串的长度时,直接break; 
                i = start;
                j = end;
            while(s[i] == s[j] && i < j){   
                i++;
                j--;
            }
            if(i >= j && maxLen < end - start + 1){     //当找到更长的子串时 
                maxLen = end - start + 1;               //记录最长子串的长度 
                str = s.substr(start,end-start+1);      //记录该回文子串 
            }
        }
    }
    return str;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值