ধরুন আমাদের দুটি স্ট্রিং s এবং t আছে, t বড় হাতের অক্ষরে আছে। আমরা নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করে s কে t তে রূপান্তর করতে পারি কিনা তা পরীক্ষা করতে হবে৷
- কিছু ছোট হাতের অক্ষরকে বড় হাতের অক্ষরে রূপান্তর করুন।
- সকল ছোট হাতের অক্ষর সরান।
সুতরাং, যদি ইনপুটটি s ="fanToM", t ="TOM" এর মত হয়, তাহলে আউটপুটটি True হবে কারণ আমরা 'o' কে 'O' তে পরিবর্তন করতে পারি তারপর এটিকে t করতে s থেকে অন্যান্য ছোট হাতের অক্ষরগুলি সরিয়ে ফেলতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=s এর আকার, m :=t এর আকার
- dp:=আকারের একটি ম্যাট্রিক্স (m + 1)x(n + 1) এবং False দিয়ে পূরণ করুন
- dp[0, 0] :=সত্য
- আমি 0 থেকে s - 1 এর পরিসরের জন্য, কর
- j-এর জন্য 0 থেকে t আকারের পরিসরে,
- যদি dp[i, j] সত্য হয়, তাহলে
- যদি বড় হাতের j
- dp[i + 1, j + 1] :=সত্য
- যদি বড় হাতের j
- যদি s[i] বড় হাতের অক্ষরে না থাকে, তাহলে
- dp[i + 1, j] :=সত্য
- করুন
- যদি dp[i, j] সত্য হয়, তাহলে
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s,t): n = len(s) m = len(t) dp= [[False for i in range(m+1)] for i in range(n+1)] dp[0][0] = True for i in range(len(s)): for j in range(len(t)+1): if dp[i][j] == True: if j < len(t) and (s[i].upper() == t[j]): dp[i + 1][j + 1] = True if s[i].isupper()==False: dp[i + 1][j] = True return dp[n][m] s = "fanToM" t = "TOM" print(solve(s, t))
ইনপুট
"fanToM", "TOM"
আউটপুট
True