0
点赞
收藏
分享

微信扫一扫

最长回文子串&判断是否为回文数字

科牛 2022-01-10 阅读 139

判断数字是否为回文字:
给你一个整数 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);
    }
};
举报

相关推荐

0 条评论