如何在 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 == 0或j == 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 也用於其他領域,例如數據科學和機器學習。