দুটি স্ট্রিং str1 এবং str2 দেওয়া আছে, যাদের দৈর্ঘ্য সমান। আমাদের চেক করতে হবে কি str1-কে str2-তে রূপান্তর করা সম্ভব শূন্য বা অধিক কনভারশন দিয়ে।
একটি কনভারশনে str1-এ থাকা একটি ক্যারেক্টারের সকল~Occurrence কে অন্য যেকোনো लोয়ারকেস ইংরেজি ক্যারেক্টারে রূপান্তর করা যায়। যাচাই করতে হবে রূপান্তর সম্ভব কিনা।
যেমন, str1 = "aabcc", str2 = "ccdee" হলে আউটপুট true, কারণ: 'c'→'e', 'b'→'d', 'a'→'c' রূপান্তর করলে হয়। কনভারশনের ক্রম গুরুত্বপূর্ণ।
compress(s) ফাংশন: স্ট্রিং-এর কনসিকিউটিভ ক্যারেক্টার কাউন্ট করে লিস্ট রিটার্ন করে।
canConvert(str1, str2) ফাংশন: দুটি স্ট্রিং কম্প্রেস করে তুলনা করে।
ফ্রিকোয়েন্সি ম্যাপ ব্যবহার করে ক্যারেক্টার ম্যাপিং যাচাই করা হয়।
শেষে ২৬টি ক্যারেক্টার থেকে ইউনিক ক্যারেক্টার বাদ দিয়ে বাকি আছে কিনা চেক করা হয়।
class Solution(object):
def compress(self, s):
n = len(s)
a = []
count = 1
for i in range(1, n):
if s[i] != s[i-1]:
a.append(count)
count = 1
else:
count += 1
a.append(count)
return a
def canConvert(self, str1, str2):
a = self.compress(str1)
b = self.compress(str2)
n = len(a)
m = len(b)
d = {}
n = min(n, m)
i = 0
while i < n:
if a[i] > b[i]:
return False
i += 1
for ch in str2:
if ch not in d:
d[ch] = 1
return True if (26 - len(d)) or (str1 == str2) else False
ob = Solution()
print(ob.canConvert("aabcc", "ccdee"))
"aabcc", "ccdee"
True