代码题(16)— 回文(1)

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;
    }
};

原文地址:https://www.cnblogs.com/eilearn/p/9260769.html

时间: 2024-08-03 15:36:32

代码题(16)— 回文(1)的相关文章

第二届战神杯线上编程挑战赛月赛第一题:回文数

题目详情: Njzy学习了回文串后联想到了回文数,他希望统计出一个区间内的全部回文数.如今给定一个闭区间[a,b],求这个区间里有多少个回文数. 比方[20,30],仅仅有一个回文数那就是22. 输入描写叙述: 输入包括多组測试数据,每组測试数据包括两个整数a,b, (0<a<=b<10^6). 输出描写叙述: 对于每组測试数据输出对应的答案. 答题说明: 输入例子: 1 10 20 30 300 400 输出例子: 9 1 10 解题思路: total[i]代表从1到i之间有多少回文数

C和指针--编程题9.14第10小题--判断回文函数

题目: 编写函数 int palindrom( char *string); 如果参数字符串是个回文,函数就返回真,否则就返回假.回文就是指一个字符串从左向右读和从右向左读是一样的.函数应忽略所有的非字母字符,而且在进行字符比较时不用区分大小写. 前提是空白字符.标点符号和大小写状态被忽略,当Adam第1次遇到Eve时他可能会说的一句话:"Madam,I'm Adam"就是回文一例. 分析题目,题目中没有规定空字符串和全是非字母字符的情况是否属于回文,我私自将空字符串归为回文,将全是非

[编程题-蘑菇街]回文串

[编程题] 回文串 给定一个字符串,问是否能通过添加一个字母将其变为回文串. 输入描述: 一行一个由小写字母构成的字符串,字符串长度小于等于10. 输出描述: 输出答案(YES\NO). 输入例子: coco 输出例子: YES #include<iostream> #include<string> using namespace std; bool f(string& s, int i) { int l = 0, r = s.size() - 1; if (l == i)

LeetCode刷题-009回文数

判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 示例 1:输入: 121输出: true 示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 示例 3:输入: 10输出: false解释: 从右向左读, 为 01 .因此它不是一个回文数. 进阶:不将整数转为字符串来解决这个问题 1 class Solution { 2 public: 3 bool isPalindrom

LeetCode 第125题 验证回文串

(一)题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false (二)算法思路 1 先将字符串转换成字符数组 用到的函数 toCharArray() 2 从两端开始判断每一个字符是否为字母或数字,虽然题目说的只考虑字

算法趣题之回文数

题目:求用十进制.二进制.八进制表示都是回文数的所有数字中,大于十进制数10的最小值. 啥叫回文数:如果把某个十进制数按相反的顺序排列,得到的数和原来的数相同,则这个数就是"回文数".例如12321就是一个回文数. 这个题目拿Ruby.JavaScript.python.Java都很容易实现,因为这些语言都提供了字符串逆序处理的接口,或者相关其他接口,而C语言没有提供直接转换的接口,所以下面用C语言解题,其中设计的封装在工作中也会经常碰到,故记录并分享,如有错误或者有更好的算法,欢迎留

C++刷题——2704: 回文素数

2704: 回文素数 /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 5 月 26 日 * 版 本 号:v1.0 */ Description 输入一个数n,输出n以内所有的回文素数.回文素数,即既是素数,又是回文数,从前往后.从后往前看一个样.例373. Input 大于10的正整数n Output n以内所有的回文素数 Sample Input 500

腾讯2017暑期实习生编程题 第一题 构造回文

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢? 输出需要删除的字符个数. 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数. 输入例子1: abcda google 输出例子1: 2 2 import java.util.ArrayList; import java.util.LinkedList; import java.uti

python 代码题06 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数

def is_palindrome(n): return str(n) == str(n)[::-1] output = filter(is_palindrome, range(1, 1000)) print('1~1000:', list(output)) if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 11

UVa401 回文词

Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDEDCBA" is a palindrome because it is the same when the string is read from left to right as when the string is