• 代码题(16)— 回文数、回文串、最长回文串


    1、9. 回文数

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    示例 1:

    输入: 121
    输出: true
    

    示例 2:

    输入: -121
    输出: false
    解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    

    示例 3:

    输入: 10
    输出: false
    解释: 从右向左读, 为 01 。因此它不是一个回文数。
    class Solution {
    public:
        bool isPalindrome(int x) {
            if(x < 0)
                return false;
            else
            {
                string s = to_string(x);
                int j = s.size()-1;
                for(int i=0;i<(s.size())/2;++i)
                {
                    if(s[i] != s[j])
                        return false;
                    j--;
                }
            }
            return true;
        }
    };

    2、125. 验证回文串

      给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    说明:本题中,我们将空字符串定义为有效的回文串。

    示例 1:

    输入: "A man, a plan, a canal: Panama"
    输出: true
    

    示例 2:

    输入: "race a car"
    输出: false
    class Solution {
    public:
        bool isPalindrome(string s) {
            if(s.size()==0)
                return true;
            transform(s.begin(), s.end(), s.begin(), ::tolower);  //transform函数的作用是:将某操作应用于指定范围的每个元素
    // tolower是转换为小写字母;toupper是转换为大些字母
    int i = 0, j = s.length()-1; while(i<j) { while(i<j && !((s[i]>='a'&&s[i]<='z') || (s[i]>='0'&&s[i]<='9'))) ++i; while(i<j && !((s[j]>='a'&&s[j]<='z') || (s[j]>='0'&&s[j]<='9'))) --j; if(s[i]!=s[j]) return false; ++i; --j; } return true; } };

    3、409. 最长回文串

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

    在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

    注意:
    假设字符串的长度不会超过 1010。

    示例 1:

    输入:
    "abccccdd"
    
    输出:
    7
    
    解释:
    我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
    class Solution {
    public:
        int longestPalindrome(string s) {
            if(s.size() == 0)
                return 0;
            int res = 0;
            bool mid = false;
            unordered_map<char, int> m;
            for(int i=0;i<s.size();++i)
                m[s[i]]++;
            for(auto iter=m.begin();iter != m.end();iter++)
            {
                res += iter->second;
                if (iter->second % 2 == 1) {
                    res -= 1;
                    mid = true;
                } 
            }
            return mid ? res+1:res;
        }
    };
  • 相关阅读:
    向Url发送post请求传递参数
    表格列转行
    C#匹配HTML中的图片地址
    C# 正则表达式(备忘录)
    将天文数字转换成中文大写
    搜索引擎优化排名因素小结
    WPF概述
    将中文汉字转换成拼音(全拼)
    提取网页中的链接并生成xml
    快速排序算法的实现
  • 原文地址:https://www.cnblogs.com/eilearn/p/9260769.html
Copyright © 2020-2023  润新知