Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで1つの単語を別の単語に変更するために必要なステップ数を見つけるためのプログラム


辞書と呼ばれる単語のリストがあり、別の2つの文字列の開始と終了があるとします。一度に1文字ずつ変更して、最初から最後まで到達したいと考えています。結果として得られる各単語も辞書に含まれている必要があります。単語では大文字と小文字が区別されます。したがって、最後に到達するために必要な最小ステップ数を見つける必要があります。それが不可能な場合は、-1を返します。

したがって、入力がdictionary =["may"、 "ray"、 "rat"] start ="rat" end ="may"の場合、次のパスを選択できるため、出力は3になります。["rat "、"光線 "、"かもしれない"]。

これを解決するには、次の手順に従います-

dictionary := a new set with all unique elements present in
q = a double ended queue with a pair (start, 1)
while q is not empty, do
   (word, distance) := left element of q, and delete the left element
   if word is same as end, then
      return distance
      for i in range 0 to size of word - 1, do
         for each character c in "abcdefghijklmnopqrstuvwxyz", do
            next_word := word[from index 0 to i - 1] concatenate c concatenate word[from index (i + 1) to end]
            if next_word is in dictionary, then
               delete next_word from dictionary
               insert (next_word, distance + 1) at the end of q
return -1

例(Python)

理解を深めるために、次の実装を見てみましょう-

from collections import deque
class Solution:
   def solve(self, dictionary, start, end):
      dictionary = set(dictionary)
      q = deque([(start, 1)])
      while q:
         word, distance = q.popleft()
         if word == end:
            return distance
         for i in range(len(word)):
            for c in "abcdefghijklmnopqrstuvwxyz":
               next_word = word[:i] + c + word[i + 1 :]
               if next_word in dictionary:
                  dictionary.remove(next_word)
                  q.append((next_word, distance + 1))
      return -1
ob = Solution()
dictionary = ["may", "ray", "rat"]
start = "rat"
end = "may"
print(ob.solve(dictionary, start, end))

入力

["may", "ray", "rat"], "rat", "may"

出力

3

  1. Pythonで8パズルを解くためのステップ数を見つけるプログラム

    すべての数字が0から8の範囲にあり、繰り返しの数字がない3x3ボードがあるとします。これで、0を4つの隣接ノードのいずれかと交換できます。これを解決して、すべての配置されたシーケンスを取得しようとしています。目標に到達するために必要な最小ステップ数を見つける必要があります。 したがって、入力が次のような場合 3 1 2 4 7 5 6 8 0 その場合、出力は4になります これを解決するには、次の手順に従います- 関数find_next()を定義します。これはノードを取ります moves:=各値に対応する

  2. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: