Pythonで文字列がコリンドローム(Colindrome)かどうかを判定する方法
コリンドロームとは?
「コリンドローム(Colindrome)」とは、長さ6の回文(パリンドローム)を連結してできた文字列のことを指します。回文とは、前から読んでも後ろから読んでも同じになる文字列のことです。
例えば、入力が s = "aabbaamnoonm" の場合を見てみましょう。この文字列は「aabbaa」と「mnoonm」という2つの長さ6の回文に分割できるため、出力は True になります。
解法のアプローチ
この問題を解くには、以下の手順に従います。
- まず、文字列 s の長さが6の倍数でない場合は
Falseを返します。 - 次に、0から文字列の末尾まで6文字ずつ区切りながらループ処理を行います。
- 各6文字の部分文字列が回文でない場合は
Falseを返します。 - すべての部分文字列が回文であれば
Trueを返します。
実装例
それでは、実際のPythonコードを見て理解を深めましょう。
def is_palindrome(s):
return s == s[::-1]
def solve(s):
if len(s) % 6 != 0:
return False
for i in range(0, len(s), 6):
if not is_palindrome(s[i : i+6]):
return False
return True
s = "aabbaamnoonm"
print(solve(s))コードのポイント
s[::-1]はスライス記法を使って文字列を逆順にする定番テクニックです。元の文字列と逆順の文字列が一致すれば、それは回文であると判定できます。range(0, len(s), 6)により、6文字ずつステップしながらインデックスを取得し、s[i : i+6]で部分文字列を切り出しています。
入力
"aabbaamnoonm"
出力
True
まとめ
このアルゴリズムの計算量は O(n) です。文字列を一度走査するだけで判定できるため、非常に効率的です。文字列操作とスライス記法を組み合わせることで、シンプルかつ可読性の高いコードを実現できます。
-
Pythonで文字列がASCIIのみで構成されているかどうかを確認する方法
Pythonで文字列がすべてASCII文字だけで構成されているかどうかを判定したい場面は少なくありません。ここでは、代表的な2つの方法をわかりやすく解説します。 方法1:all()とord()を使って1文字ずつチェックする 最もシンプルな方法は、文字列内の各文字を順番に調べ、その文字コード(Unicodeコードポイント)が128未満であるかを確認することです。ASCIIは0〜127のコードポイントで定義されているため、すべての文字がこの範囲内であれば、その文字列はASCIIのみで構成されていると判断できます。 def is_ascii(s): return all(ord(c) <
-
Pythonで文字列が英数字のみかどうかを判定する方法【isalnum()と正規表現】
Pythonでは、文字列が英数字(アルファベットと数字)のみで構成されているかどうかを簡単に判定できます。主な方法は2つあります。文字列クラスに組み込まれている isalnum() メソッドを使う方法と、正規表現を使う方法です。 isalnum()メソッドを使う方法 Pythonの文字列クラスには isalnum() というメソッドが用意されています。このメソッドを文字列に対して呼び出すと、文字列が英数字のみで構成されている場合に True を、記号などが含まれる場合には False を返します。 >>> 123abc.isalnum() True >>>