大家好,又见面了,我是你们的朋友全栈君。
题目及要求:
给你一个字符串 s,找到 s 中最长的回文子串。
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
原创代码:
class Solution {
public:
string longestPalindrome(string s)
{
int begin=0;//每个当前子串的开头
int end=0;//每个当前子串的末尾
int value=0;//判断条件使用。条件一:当形参string s不存在两个及两个以上元素个数的回文字串则value=1,条件二:当形参string s存在两个及两个以上元素个数的回文字串则value=0
int max=0;//记录历史回文字串的最大元素个数
string str;//代表当前回文串
string str_2=s[0];//代表最大回文串
for(begin=0;begin<=s.size()-1;begin++)
{
for(end=begin;end<=s.size()-1;end++)
{
value=0;
/*条件一:当形参string s不存在两个及两个以上元素个数的回文字串则value=1*/
for(int i=0;i<=(end-begin)/2;i++)
{
if(s[begin+i]!=s[end-i])
{
value=1;
break;
}
}
/*条件二:当形参string s存在两个及两个以上元素个数的回文字串则value=0*/
if(value==0)
{
str.erase(0,str.size());
for(int i=begin;i<=end;i++)
{
str.push_back(s[i]);
}
str_2=str.size()>max?str:str_2;
max=str.size()>max?str.size():max;
if(str_2.size()==s.size())
return str_2;
}
}
}
return str_2;
}
};
输出示例:
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”
示例 4:
输入:s = “ac”
输出:“a”
代码思路:
首先:
定义变量,并将str_2用s[0]赋初值,用以当形参string s不存在两个及两个以上元素个数的回文字串则输出形参s的首元素
int begin=0;//每个当前子串的开头
int end=0;//每个当前子串的末尾
int value=0;//判断下一个字符是否属于当前子串
int max=0;//记录历史回文子串的最大元素个数
string str;//代表当前回文子串
string str_2=s[0];//代表最大回文子串
其次:
每一个子串(形参s元素s[begin]至s[end]之间的元素)都先判断条件一(当前子串是否存在两个及两个以上元素个数的回文字串)是否满足。若满足条件一,则进行
value=1;
break;
则str_2的值不改变为初值s[0],接下来继续进行循环
end++
如果当前子串(形参s元素s[begin]至s[end]之间的元素)不满足条件一,则由于此时
value=0;
则直接进入条件二来将str(形参s元素s[begin]至s[end]之间的元素)重新赋值(注意str表示当前的回文子串)并通过变量max来判断当前回文子串str与历史最大回文子串str_2的元素进行比较,如果当前回文子串str元素个数比历史最大回文子串str_2的元素个数更大则将历史最大回文子串str_2重新赋值
注意接下来的语句是用来缩小程序运行时间的
if(str_2.size()==s.size())
return str_2;
接下来继续进行循环
end++
最后:
当满足begin>s.size()-1时退出程序,执行
return str_2
反思所得:
在这道题的解题过程中,我开始的时候是不明白回文的定义是什么的,但是经过代码的不断上传和查看他人的讲解,我明白了回文的定义(类似于“上海自来水来自海上”),了解了回文的定义我就重新修改了思路,为了简便算法,我开始考虑将程序分条件编程,并且在每个条件内尽量减少程序进行无用的部分。
LeetCode链接:
https://leetcode-cn.com/problems/longest-palindromic-substring/
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132343.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...