দুটি স্ট্রিং s (টাইপড) এবং t (টার্গেট) দেওয়া আছে। কীবোর্ডের কী স্টাক থাকতে পারে, তাই একটি ক্যারেক্টার ১ বা অধিকবার টাইপ হতে পারে। s কি t লিখতে গিয়ে তৈরি হতে পারে? চেক করুন।
ইনপুট উদাহরণ
s = "appppleee"
t = "apple"
আউটপুট: True
অ্যালগরিদম
- দুই পয়েন্টার
i(s-এর জন্য),j(t-এর জন্য)। - যদি
s[i] == t[j]: উভয় বাড়ান,t_last = t[j]। - যদি
s[i] == t_last: শুধুi++(রিপিটেড কী)। - অন্যথায়:
False। - শেষে
s-এর বাকি ক্যারেক্টার সবt_lastহলেTrue।
পাইথন কোড
def solve(s, t):
i = j = 0
s_len = len(s)
t_len = len(t)
t_last = ""
while j < t_len:
if i == s_len:
return False
if s[i] == t[j]:
t_last = t[j]
i += 1
j += 1
elif s[i] == t_last:
i += 1
else:
return False
if i < s_len:
return all(char == t_last for char in s[i:])
else:
return True
# টেস্ট
print(solve("appppleee", "apple")) # True
ব্যাখ্যা
গ্রিডি ম্যাচিং: টার্গেটের ক্যারেক্টার ম্যাচ করাতে হলে, এক্সট্রা ক্যারেক্টার শুধু শেষ ম্যাচ করা ক্যারেক্টারের রিপিট হতে পারে। সময় O(n+m)।