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