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)复杂度的。