Pythonで文字列がすべて一意の文字で構成されているか判定する方法
文字列 s が与えられたとき、その文字列がすべて一意(重複しない)な文字で構成されているかどうかを判定する問題について解説します。
たとえば、入力が "world" の場合、すべての文字が異なるため出力は True になります。一方、"hello" のように同じ文字(l)が含まれる場合は False となります。
解決のアプローチ
この問題は、Python の set() を使うことで非常にシンプルに解決できます。手順は以下のとおりです。
set_var:= 文字列sのすべての文字から新しいセット(集合)を作成するset_varのサイズがsの長さと一致すればTrueを返し、そうでなければFalseを返す
ポイント: セットには重複した要素が格納されないという性質があります。そのため、元の文字列の長さとセットのサイズを比較することで、重複する文字が存在するかどうかを簡単に判定できます。
実装例
理解を深めるために、以下の実装を見てみましょう。
class Solution:
def solve(self, s):
set_var = set(s)
return len(set_var) == len(s)
ob = Solution()
print(ob.solve('hello'))
print(ob.solve('world'))
入力
hello
world
出力
False
True
コードの解説
set(s) を呼び出すと、文字列内の各文字がセットの要素として登録されます。このとき重複する文字は自動的に取り除かれます。
'hello'の場合:セットは{'h', 'e', 'l', 'o'}となり、サイズは 4。元の文字列の長さは 5 なのでFalseが返されます。'world'の場合:セットは{'w', 'o', 'r', 'l', 'd'}となり、サイズは 5。元の文字列の長さも 5 なのでTrueが返されます。
この方法の計算量は O(n)(n は文字列の長さ)であり、非常に効率的です。追加のデータ構造としてセットを使用しますが、実装が簡潔で可読性も高いため、実務でも広く使われる定番のテクニックです。
-
Pythonで文字列を逆順に反転する方法|追加メモリ不要のインプレース手法
文字の配列が与えられたとき、追加のメモリ領域を使用せずに文字列を逆順に反転することを考えます。たとえば、入力が [H, E, L, L, O] である場合、期待される出力は [O, L, L, E, H] となります。 解法のアプローチ この問題は「Two Pointers(ツーポインタ)」と呼ばれる定番のテクニックで効率的に解けます。考え方はシンプルで、配列の両端から中央に向かって文字を交換していくだけです。 手順 2つのポインタを用意します:start = 0、end = 文字列の長さ - 1 s[start] と s[end] の文字を入れ替えます start を1つ増やし、end を
-
Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説
Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial