সমস্যা বিবরণ
একটি স্ট্রিং S দেওয়া থাকে যেখানে একই অক্ষরগুলো التوالي গোষ্ঠী (group) তৈরি করে। ৩ বা তার বেশি অক্ষর থাকলে সেটাকে "বড় গোষ্ঠী" বলা হয়। প্রতিটি বড় গোষ্ঠীর শুরু এবং শেষ ইনডেক্স খুঁজে বের করুন।
উদাহরণ
ইনপুট: "abcdddeeeeaabbbcd" → আউটপুট: [[3,5],[6,9],[12,14]]
গোষ্ঠীগুলো: "a"(0), "bb"(1-2), "xxxx"(3-5), "z"(6), "yy"(7-8) → বড় গোষ্ঠী: "xxxx" (3-5), "eeee" (6-9), "bbb" (12-14)।
এলগরিদম
ans = [],csum = 0(ক্যুমুলেটিভ ইনডেক্স)।itertools.groupbyদিয়ে التوالي অক্ষরগুলো গোষ্ঠী করুন।- প্রতিটি গোষ্ঠীর জন্য:
grp = list(group)।- যদি
len(grp) >= 3→ans.append([csum, csum + len(grp) - 1])। csum += len(grp)।
ansরিটার্ন করুন।
পাইথন বাস্তবায়ন
from itertools import groupby
class Solution:
def largeGroupPositions(self, S):
ans = []
csum = 0
for char, group in groupby(S):
grp = list(group)
if len(grp) >= 3:
ans.append([csum, csum + len(grp) - 1])
csum += len(grp)
return ans
ob = Solution()
print(ob.largeGroupPositions("abcdddeeeeaabbbcd"))
# আউটপুট: [[3, 5], [6, 9], [12, 14]]
ইনপুট / আউটপুট
ইনপুট: "abcdddeeeeaabbbcd" আউটপুট: [[3, 5], [6, 9], [12, 14]]