Pythonで回文数を確認する方法は?
公開: 2020-11-30目次
回文とは何ですか?
回文とは、単語、数字、または文字列であり、前方に読み取るのと同じように後方に読み取ります。
いくつかの例:分離、1567651、2020年2月2日、マラヤーラム語
したがって、この記事では、Pythonを使用して、特定の入力が回文であるかどうかを確認するプログラムを作成するさまざまな方法を紹介します。
方法1:
頭に浮かぶ最も素朴な解決策は、数値を逆にして、入力数値と等しいかどうかを確認することです。 それは次のように行うことができます:
数値= int(input());
リバース= 0
番号>0の場合:
桁=数値% 10
リバース=リバース* 10 +桁
番号=番号// 10
number == reverseの場合:
print(「回文です!」)
そうしないと:
print(「回文ではありません!」)
ただし、これによりコードの可読性が損なわれ、必要以上のコード行が含まれます。 詳細については、オンラインデータサイエンスコースをご覧ください。
これは、1行だけを使用して番号を確認するための短くて甘い方法です。
方法2:
秘訣は、入力番号をintではなくstrデータ型として取得することです。 次に、[::-1]スライス手法を使用して文字列の逆を取得し、 ifステートメント自体が等しいかどうかを確認できます。
数値= input()
番号==番号[::-1]の場合:
print(「回文です!」)
そうしないと:
print(「回文ではありません!」)
方法3:
これは、配列が回文であるかどうかを確認するための再帰的な方法です。
def isPalindrome(numbers、start、end):
start> = endの場合:
Trueを返す
数値[開始]==数値[終了]の場合:
isPalindrome (numbers、start + 1、end – 1)を返します
そうしないと:
Falseを返します
数値=list(map(int、input()。split()))
n = len(数値)
isPalindrome(numbers、0、n-1)の場合:
print(「回文です!」)
そうしないと:
print(「回文ではありません!」)
isPalindrome関数は、最初と最後の配列要素が同じかどうかをチェックします。 そうでない場合、関数はすぐにFalseを返します。 それ以外の場合は、2つのポインターが中央で交わるまで、次の極端な要素を再帰的にチェックします。
読む: Pythonプロジェクトのアイデアとトピック
回文に関連する一般的なコーディングインタビューの質問
#1最長の回文部分文字列
入力として文字列が1つしかない場合は、文字列内で最も長いパリンドローム部分文字列の長さを返す必要があります。
例えば:
入力:'acbcbabcc'
出力:5('cbabc')
アプローチ:
これをDPの最も一般的な問題の1つである、最も長い一般的なサブ文字列に関連付けようとすると、ここでの違いは、LCSが2つの文字列を使用するのに対し、入力文字列は1つだけ与えられることです。 回文はその逆に正確に等しいことがわかっているので、2番目の文字列を指定された入力の逆として作成できます。
これで、LCSを見つけるのとまったく同じになります。
def LCSubstr(A、B、m、n):
LCSub = [[0 for i in range(n + 1)] for j in range(m + 1)]
ans = 0
範囲内のiの場合(m + 1):

範囲(n + 1)のjの場合:
if (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
ansを返す
str1 = input()
str2 = str1 [::-1]
m = len(str1)
n = len(str2)
print('最長のパリンドローム部分文字列の長さ='、LCSubstring(str1、str2、m、n))
したがって、上記の入力では、2つの文字列を次のように取得します。
'acbcbabcc'および
'ccbabcbca'
最も長い共通の部分文字列は、長さが5の「cbabc」になります。
#2文字列のアナグラムが回文であるかどうかを確認します
入力として文字列を指定すると、文字列のアナグラムが回文である可能性があるかどうかを確認し、それに応じてyes/noを返す必要があります。
例えば:
入力:'pythonpython'
出力:はい
(文字列自体は回文ではありませんが、可能なアナグラム「pythonnohtyp」は回文を形成します)
入力:「ハリーポッター」
出力:いいえ
アプローチ:
注意深く気付くと、同じ長さの回文文字列がある場合は常に、前半のすべての文字が後半に繰り返されます。 これは、文字列に存在するすべての文字が偶数回出現することを意味します。
長さが奇数の場合、中央の要素の左側にあるすべての文字(包括的ではない)は、中央の要素の右側に同じ回数出現します。 これは、奇数回出現する文字(中央の要素)が1つだけで、他のすべての文字が偶数回出現することを意味します。
このロジックを使用して、文字列内の文字数をハッシュに格納し、これらの制約をチェックして必要な答えを得ることができます。
CHAR_RANGE = 256
str1 = input()
freq = [0 for i in range(CHAR_RANGE)]
str1のiの場合:
freq [ord(i)] + = 1 #ord(x)はxのユニコード値を与えます
num_odds = 0
範囲内のiの場合(CHAR_RANGE):
freq [i]&1の場合:
num_odds + = 1
if (num_odds> 1):
印刷(「はい」)
そうしないと:
print(“ No”)
結論
結論として、回文の問題は非常に一般的で興味深いものです。 これらは、さまざまな数学パズルや競技プログラミングの質問を解くのに役立ちます。
データサイエンスについて知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。1業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。
回文プログラムの時間計算量はどれくらいですか?
各基本プロセスが完了するまでに一定の時間がかかると仮定すると、メソッドによって実行される基本操作の数は、時間計算量を推定するためによく使用されます。 数が回文であるかどうかを判断する時間計算量はO(log10(n))です。 値が回文であるかどうかを確認するときは、各反復で数値または値を10で除算します。 結果として、時間計算量は数値の桁数に等しくなります。
/はPythonの//演算子とどう違うのですか?
除算演算子、つまりPythonで単一のスラッシュ(/)を使用する場合、コンパイラーはスラッシュの右側と左側の2つの値を単純に除算します。 しかし、ダブルスラッシュ(//)、つまり床除算を使用する場合、コンパイラに通常の除算プロセスを実行するように依頼しますが、結果は答えに近い可能な最大の整数になります。 この整数は、通常の除算の結果以下です。
Python開発者のエントリーレベルの給与はいくらですか?
Pythonがほとんどの業界や企業で広く使用されており、Pythonが2番目に高額なコンピューティング言語になっていることはよく知られている事実です。 Pythonは、習得が容易で柔軟性が高いため、学生や専門家の間でも人気のあるプログラミング言語です。 インドのPython開発者の初任給は、平均して年間約4,27,293インドルピーです。 Pythonはデータサイエンスや機械学習などの他の分野でも使用されているため、Pythonを学ぶ専門家には多くの範囲があります。