Pythonで文字列の接頭辞・接尾辞が回文かどうかを判定する方法
文字列 s が与えられたとき、その文字列の接頭辞(プレフィックス)および接尾辞(サフィックス)となる部分文字列が回文になっているかどうかを判定します。
たとえば、入力が s = "levelishighforracecar" の場合、接頭辞に「level」、接尾辞に「racecar」という回文がそれぞれ存在するため、出力は True になります。
解決の手順
この問題は、以下の手順で解くことができます。
lに文字列sの長さを代入します。iを 2 からlまで繰り返します。先頭からインデックスiまでの部分文字列が回文であれば、ループを抜けます。- 回文となる接頭辞が見つからなかった場合は False を返します。
- 再び
iを 2 からlまで繰り返します。末尾側のインデックス(l - i)から(l - 1)までの部分文字列が回文であれば、True を返します。 - どちらにも該当しない場合は False を返します。
それでは、実際の実装を見て理解を深めましょう。
実装例(サンプルコード)
def is_palindrome(s):
return s == s[::-1]
def solve(s):
l = len(s)
for i in range(2, l + 1):
if is_palindrome(s[0:i]):
break
if i == (l + 1):
return False
for i in range(2, l + 1):
if is_palindrome(s[l - i : l]):
return True
return False
s = "levelishighforracecar"
print(solve(s))
コードの解説
is_palindrome 関数は、スライス記法 s[::-1] を使って文字列を反転させ、元の文字列と一致するかどうかで回文判定を行っています。非常にシンプルで Python らしい書き方です。
solve 関数では、まず前半のループで「長さ 2 以上の回文となっている接頭辞」を先頭から順に探索します。回文が見つかれば break でループを終了し、後半の処理に進みます。後半のループでは、末尾から順に「長さ 2 以上の回文となっている接尾辞」を探索し、見つかった時点で True を返します。
入力
"levelishighforracecar"
出力
True
このように、スライスを活用したシンプルな回文判定関数と二段階のループを組み合わせることで、文字列の接頭辞・接尾辞に回文が存在するかどうかを簡単に判定できます。
-
Pythonで文字列が英数字のみかどうかを判定する方法【isalnum()と正規表現】
Pythonでは、文字列が英数字(アルファベットと数字)のみで構成されているかどうかを簡単に判定できます。主な方法は2つあります。文字列クラスに組み込まれている isalnum() メソッドを使う方法と、正規表現を使う方法です。 isalnum()メソッドを使う方法 Pythonの文字列クラスには isalnum() というメソッドが用意されています。このメソッドを文字列に対して呼び出すと、文字列が英数字のみで構成されている場合に True を、記号などが含まれる場合には False を返します。 >>> 123abc.isalnum() True >>>
-
Pythonで文字列が指定した接尾辞(サフィックス)で終わっているかどうかを確認する方法
endswith()メソッドを使う方法Pythonでは、文字列クラスに用意されている endswith() メソッドを使うことで、文字列が特定の接尾辞(サフィックス)で終わっているかどうかを簡単に確認できます。このメソッドは、検索したい接尾辞の文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。以下のように使用します。string = C:/Users/TutorialsPoint1/~.py print(string.endswith(.py))実行結果:Trueこの例では、ファイルパスの文字列が .py という拡張子で終わっているため、True が返されます。もし終わってい