如何在 Python 中检查回文数?

已发表: 2020-11-30

目录

什么是回文?

回文是一个单词、数字或任何字符串,它们向后读取与向前读取相同。

几个例子: detartrated,1567651,02/02/2020,马拉雅拉姆语

因此,本文向您展示了使用 Python 编写程序来检查给定输入是否为回文的各种方法。

方法一:

想到的最天真的解决方案是反转数字并检查它是否等于输入数字。 可以按如下方式完成:

数字 =整数(输入());

反向 = 0

而数字> 0:

数字 =数字 % 10

反向 =反向 * 10 +数字

数字 =数字 // 10

如果数字==反向:

print(“这是一个回文!”)

别的:

print(“这不是回文!”)

但是,这会损害代码的可读性,并且代码行数超出了要求。 查看我们的在线数据科学课程以了解更多信息。

这是仅使用一行来检查数字的简短而甜蜜的方法。

方法二:

诀窍是将输入数字作为str数据类型而不是int。 然后,您可以使用 [::-1] 切片技术来获取字符串的反转并检查if语句本身的相等性。

数字 =输入()

如果数字 ==数字[::-1]:

print(“这是一个回文!”)

别的:

print(“这不是回文!”)

方法三:

这是一种检查数组是否为回文的递归方法。

def isPalindrome(数字,开始,结束):

如果开始 >=结束:

返回真

如果数字[开始] ==数字[结束]:

返回isPalindrome(数字,开始 + 1,结束 - 1)

别的:

返回

数字=列表(地图(int,输入().split()))

n=len(数字)

如果是回文(数字,0,n-1):

print(“这是一个回文!”)

别的:

print(“这不是回文!”)

isPalindrome函数检查一个和最后一个数组元素是否相同。 如果不是,该函数立即返回 False。 否则,它递归地检查下一个极端元素,直到两个指针在中间相遇。

阅读: Python 项目理念和主题

与回文相关的常见编码面试问题

#1 最长回文子串

仅给定一个字符串作为输入,您必须返回字符串中最长的回文子串的长度。

例如:

输入:'acbcbabcc'

输出:5('cbabc')

方法:

如果我们试图将其与 DP 的最常见问题之一(最长公共子字符串)联系起来,这里的区别在于我们只得到一个输入字符串,而 LCS 使用两个字符串。 由于我们知道回文正好等于它的反转,我们可以将第二个字符串作为我们给定输入的反转。

现在这与找到 LCS 完全相同。

def LCSubstr(A, B, m, n):

LCSub = [[0表示范围内i (n+1)] 表示范围内的j (m+1)]

答案 = 0

对于范围内的i (m+1):

对于范围内的j (n+1):

如果(i == 0j == 0):

LCSub[i][j] = 0

elif A[i-1] == B[j-1]:

LCSub[i][j] = 1 + LCSub[i-1][j-1]

ans = max(ans, LCSub[i][j])

别的:

LCSub[i][j] = 0

返回答案

str1 =输入()

str2 = str1[::-1]

m = len(str1)

n =长度(str2)

print('最长回文子串的长度 = ', LCSubstring(str1, str2, m, n))

所以对于上面的输入,我们得到两个字符串为

'acbcbabcc'

'ccbabcbca'

最长的公共子串变为长度为 5 的“cbabc”

#2 检查字符串的 Anagram 是否是回文

给定一个字符串作为输入,您必须检查字符串的任何字谜是否可以是回文并相应地返回是/否。

例如:

输入:'pythonpython'

输出:是的

(虽然字符串本身不是回文,但可能的字谜“pythonnohtyp”确实形成了回文)

输入:“哈利波特”

输出:否

方法:

如果你仔细注意到,只要我们有一个偶数长度的回文字符串,前半部分的所有字符都会在后半部分重复。 这意味着字符串中出现的所有字符都出现数次。

当长度为奇数时,中间元素左侧的所有字符(不包括在内)在中间元素右侧出现的次数相同。 这意味着只有一个字符出现数次(中间元素),而所有其他字符出现偶数次。

使用这个逻辑,我们可以将字符串中的字符数存储在哈希中,并检查这些约束以获得所需的答案。

CHAR_RANGE = 256

str1 = 输入()

频率 = [0代表我在范围内(CHAR_RANGE)]

对于str1中的i

freq[ord(i)] += 1 #ord(x) 给出 x 的 unicode 值

num_odds = 0

对于我在范围内(CHAR_RANGE):

如果频率 [i] & 1:

num_odds += 1

如果(num_odds > 1):

打印(“是”)

别的:

打印(“否”)

结论

总之,回文问题非常普遍且有趣。 它们对于解决各种数学难题和竞争性编程问题很有用。

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家的指导、1与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。

回文程序的时间复杂度是多少?

该方法完成的基本操作的数量通常用于估计时间复杂度,假设每个基本过程需要一定的时间才能完成。 判断一个数是否为回文的时间复杂度为 O(log10 (n))。 当我们检查值是否为回文时,我们在每次迭代中将数字或值除以 10。 结果,时间复杂度等于数字中的位数。

/ 与 Python 中的 // 运算符有何不同?

当我们使用除法运算符,即 Python 中的单斜杠 (/) 时,编译器只需将斜杠左右两侧的两个值相除。 但是当我们使用双斜杠(//),即取整除法时,我们要求编译器执行典型的除法过程,但它产生的结果是可能接近答案的最大整数。 该整数小于或等于正常除法的结果。

Python开发人员的入门级工资是多少?

众所周知,Python 在大多数行业和公司中被广泛使用,使 Python 成为收入第二高的计算语言。 Python 也是学生和专业人士最喜欢的编程语言,因为它易于学习且高度灵活。 印度 Python 开发人员的入门级工资平均每年约为 4,27,293 印度卢比。 学习 Python 的专业人士有很多范围,因为 Python 也用于其他领域,例如数据科学和机器学习。