判断数字是否为回文字:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
题解也很简单,就不写注释了。
class Solution {
public:
bool isPalindrome(int x) {
if ( x<0 || ((x%10)==0&&x!=0))
{
return false;
}
int y = 0;
while(x>y)
{
y= y*10 + x % 10;
x = x/10;
}
return x==y || x == y/10;
}
};
第二个是输入字符串,输出其最长回文子串;
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
if(n<2) //如果字符串长度为1的话直接返回字符串自身。
{
return s;
}
vector<vector<int>>dp(n , vector<int>(n));
//创建一个容器,相当于一个n*n的数组,用来存储dp[i][j],判断s[i]-s[j]这一段字符串是不是回文
int i,j,m;
int maxlen = 1;
int begin = 0;
for(i=0 ; i<n ; i++)
{
dp[i][i] = true; //先定义字符串的每一个字符都是一个长度为1的回文字符串。
}
for(m=2;m<=n;m++) //m是定义的子字符串的长度
{
for(i=0;i<n;i++)
{
j=i+m-1;
if(j>=n) //判断右边界是否越界
{
break;
}
if(s[i]!=s[j])
{
dp[i][j]= false;
}
else
{
if(j-i<3)
{
dp[i][j]=true;
}
else
{
dp[i][j]=dp[i+1][j-1];
//如果子字符串长度大于2的话,dp[i][j]如果值为ture,
//也就是如果s[i]=s[j],这个时候就让dp[i][j]=dp[i+1][j-1],
//因为这个时候dp[i+1][j-1]的结果前几次循环早已经就判断了,如果值为ture,
//那s[i]-s[j]肯定就是个回文串了
}
}
if(dp[i][j]&&j-i+1>maxlen)
{
maxlen=j-i+1;
begin=i;
}
}
}
return s.substr(begin,maxlen);
}
};