Pythonで文字列内の最初の繰り返し文字のインデックスを検索する方法
文字列 s が与えられたとき、その中で最初に繰り返し出現する文字のインデックスを求める問題を考えてみましょう。繰り返し文字がひとつも存在しない場合は、-1 を返します。
例えば、入力が "abcade" の場合、出力は 3 になります。これは、文字 'a' がインデックス 3 の位置に再び現れているためです。
解法のアプローチ
この問題を解くには、以下の手順に従います。
- 文字の出現履歴を記録するための辞書(マップ)
charsを定義します。 iを 0 から文字列の長さまで順にループさせます。s[i]がすでにcharsに存在する場合、その時点のインデックスiを返します。- 存在しない場合は、
chars[s[i]]のカウントを 1 増やして記録します。
- ループが終了しても繰り返し文字が見つからなければ、
-1を返します。
このアルゴリズムの計算量は O(n) で、文字列を一度走査するだけで答えが得られるため、非常に効率的です。
実装例
それでは、以下のPythonコードを見て、実際の動作を確認してみましょう。
from collections import defaultdict
class Solution:
def solve(self, s):
chars = defaultdict(int)
for i in range(len(s)):
if s[i] in chars:
return i
else:
chars[s[i]] += 1
return -1
ob = Solution()
print(ob.solve("abcade"))
入力
"abcade"
出力
3
collections.defaultdict を使うことで、キーが存在しない場合でも自動的に初期値 0 が設定されるため、コードを簡潔に書くことができます。通常の辞書を使う場合は dict.get() メソッドなどで同様の処理を実装することも可能です。
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列
-
Pythonで文字列内の最初に繰り返される単語を見つける方法
文字列が1つ与えられ、その中で最初に繰り返し出現する単語を見つけるのが本記事のテーマです。この問題を実装する際には、Pythonの標準ライブラリである「collections」モジュールを活用します。collectionsが提供するCounter()クラスを使うことで、各単語の出現回数を簡単に集計できます。 アルゴリズム 処理の手順は以下のとおりです。 与えられた文字列をスペースで区切り、単語のリストに分割します。 単語のリストをCounter(辞書形式)に変換し、各単語の出現回数を集計します。 単語のリストを先頭から順に走査し、出現回数が1より多い最初の単語を特定します。 サンプルコード