【Python】1文字を削除して別の文字列に変換できるか判定する方法
2つの文字列 s と t が与えられたとき、s から1文字だけ削除することで t と同じ文字列を作れるかどうかを判定する問題について解説します。
問題の例
たとえば、入力が以下の場合を考えてみましょう。
- s = "world"
- t = "wrld"
この場合、"world" から「o」を1文字削除すると "wrld" になるため、出力は True となります。
解決のアプローチ
この問題は、次の手順で解くことができます。
- インデックス
iを 0 で初期化し、文字列sの長さをnとして取得します。 iがn未満である間、以下を繰り返します。sのi番目の文字を取り除いた文字列(前半部分と後半部分を連結)をtempとして作成します。tempがtと一致した場合、Trueを返します。
- 一致しなければ
iを1つ進めて処理を続けます。 - すべての位置を試しても一致しなかった場合は、
Falseを返します。
実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, s, t):
i = 0
n = len(s)
while(i < n):
temp = s[:i] + s[i+1:]
if temp == t:
return True
i += 1
return False
ob = Solution()
s = "world"
t = "wrld"
print(ob.solve(s, t))入力
"world", "wrld"
出力
True
コードのポイント
このコードでは、スライス構文 s[:i] + s[i+1:] を使うことで、i 番目の文字だけを除外した新しい文字列を簡単に作成しています。ループで全ての位置を順番に試すため、計算量は O(n²) となりますが、シンプルで理解しやすい実装です。
より効率的な方法としては、両文字列の長さの差がちょうど1であることを先に確認し、最初に異なる文字が現れた位置を特定して比較する方法もあります。文字列が長い場合はこちらの方が高速に動作します。
-
【Python】文字列内に含まれるURLを検出・チェックするプログラム
Pythonでは、標準ライブラリのreモジュール(正規表現モジュール)を使うことで、文字列の中にURLが含まれているかどうかを簡単にチェックできます。 この記事では、入力された文字列からURLを検出し、URLが存在する場合はそれを表示するプログラムを紹介します。URLの検出には、reモジュールが提供する findall() メソッドを使用します。 アルゴリズム ステップ1:文字列を入力として受け取る。 ステップ2:findall()関数は、文字列内のパターンに一致する「重複しないすべてのマッチ」を返す。 この関数では文字列が左から右へ走査され、見つかった順序どおりにマッチ結果が返される。 サン
-
Pythonで文字列がfloatに変換可能かどうかを判定する方法
Pythonでは、文字列がfloat(浮動小数点数)として有効かどうかを確認したい場面がよくあります。最もシンプルで確実な方法は、float()関数をtry-exceptブロックで囲むことです。 基本的な変換方法 文字列をfloatに変換するには、次のように記述します。 try: print(float(112.15)) except ValueError: print(Cannot parse) このコードを実行すると、以下の出力が得られます。 112.15 変換できない場合の挙動 もし文字列が数値として解析できない場合(例えば abc のような文字列)、ValueError