কম্পিউটার টিউটোরিয়াল

পাইথনে ওয়ার্ড চেইন থেকে সার্কেল তৈরি করা যায় কিনা চেক করা

একটি ওয়ার্ড লিস্ট দেওয়া আছে। এগুলোকে চেইন করে একটি সার্কেল বানানো যায় কিনা চেক করতে হবে। ওয়ার্ড A, ওয়ার্ড B-এর সামনে থাকতে পারবে যদি A-এর শেষ অক্ষর = B-এর প্রথম অক্ষর হয়। সব ওয়ার্ড একবার ব্যবহার করতে হবে।

উদাহরণ: words = ["ant","dog","tamarind","nausea","gun"] → আউটপুট True।

সমাধানের ধাপসমূহ (অয়লার সার্কিট / গ্রাফ থিওরি)

  1. ডিরেক্টেড গ্রাফ বানান: নোড = অক্ষর, এজ = ওয়ার্ড (স্টার্ট -> এন্ড)।

  2. inDegree এবং outDegree কাউন্ট করুন।

  3. প্রতিটি নোডের জন্য inDegree == outDegree হতে হবে (অয়লার সার্কিটের শর্ত)।

  4. প্রথম ওয়ার্ডের প্রথম অক্ষর থেকে DFS/BFS চালিয়ে সব নোড ভিজিটেড কিনা চেক করুন (কানেক্টেড কম্পোনেন্ট)।

  5. দুটি শর্ত পূরণ হলে True, অন্যথায় False।

পাইথন কোড উদাহরণ

import collections
class Solution:
    def solve(self, words):
        self.graph = collections.defaultdict(list)
        self.seen = set()
        inDegree = collections.Counter()
        outDegree = collections.Counter()
        for word in words:
            start = word[0]
            end = word[-1]
            self.graph[start].append(end)
            outDegree[start] += 1
            inDegree[end] += 1
        for node in outDegree:
            if outDegree[node] != inDegree[node]:
                return False
        self.dfs(words[0][0])
        return len(self.seen) == len(self.graph)
    def dfs(self, node):
        self.seen.add(node)
        for child in self.graph[node]:
            if child not in self.seen:
                self.dfs(child)

ob = Solution()
print(ob.solve(["ant","dog","tamarind","nausea","gun"]))

ইনপুট

["ant","dog","tamarind","nausea","gun"]

আউটপুট

True
  1. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  2. পাইথনে নন-শেয়ারিং ওয়ার্ডসের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে শব্দের তালিকায় কতগুলো আলাদা রোটেশন গ্রুপ আছে বের করার প্রোগ্রাম

  4. দুই স্ট্রিং থেকে অনকমন ওয়ার্ড বের করার পাইথন প্রোগ্রাম