09. 回文数

题目

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

示例 1:

输入: 121
输出: true

示例 2:

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

示例 3:

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

思路

由于负数肯定不是回文数,所以碰到负数就返回false;

非负数我们可以通过将其转化为字符串,然后利用字符串的倒序[::-1]来作比较。

代码

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        y = str(x)[::-1]
        if y == str(x):
            return True
        else:
            return False

复杂度分析

时间复杂度:O(n)

空间复杂度:O(n)

 

647. 回文子数

题目

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

输入:"abc"
输出:3
解释:三个回文子串: "a", "b", "c"
示例 2:

输入:"aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

思路

使用最简单的方法,逐个比较各个子串和回文子串是否相等。

若相等,则结果加一;若不相等,则进行下一个。

代码

class Solution:
    def countSubstrings(self, s: str) -> int:
        result = 0
        for i in range(0,len(s)):
            for j in range(i+1, len(s)+1):
                if s[i:j] == s[i:j][::-1]:
                    result += 1

        return result

复杂度分析

时间复杂度:O(n^2)

空间复杂度:O(n)

 

两道题的共同点

今天的两道题都用到了python的字符串的反向输出功能,即切片的[::-1]即为反向输出。

这也是python中比较好用的一个功能了,如果善用的话,可以使得代码简单不少。

当然,切片的反转这个方法本身也是O(n)复杂度的。

posted on 2020-08-19 15:51  eryoung2  阅读(80)  评论(0编辑  收藏  举报