یک تابع بنویسید که یک رشته را بهعنوان ورودی دریافت کند و کاراکترهای متوالی تکرارشده را به گروههایی با ساختار زیر دستهبندی کند:
[[value, first_index, last_index, times_repeated], ..., [value, first_index, last_index, times_repeated]].
توضیحات پارامترها:
-
- value: کاراکتر مورد بررسی.
- first_index: اندیس اولین حضور کاراکتر.
- last_index: اندیس آخرین حضور متوالی کاراکتر.
- times_repeated: تعداد دفعات تکرار متوالی کاراکتر.
نمونه ورودی و خروجی
FindRepeating("a") ➞ [["a", 0, 0, 1]]
FindRepeating("aabbb") ➞ [["a", 0, 1, 2], ["b", 2, 4, 3]]
FindRepeating("1337") ➞ [["1", 0, 0, 1], ["3", 1, 2, 2], ["7", 3, 3, 1]]
نکات:
- اگر رشته خالی باشد، لیست خالی برگردانید:
"" ➞ []. - مقادیر غیرتکراری باید در همان اندیس شروع و پایان داشته باشند.
- کاراکترهای متوالی به گروههایی جداگانه تقسیم میشوند.
EXPECT_EQ(FindRepeating("a"), std::vector>({{"a", "0", "0", "1"}}));
EXPECT_EQ(FindRepeating("aabbb"), std::vector>({{"a", "0", "1", "2"}, {"b", "2", "4", "3"}}));
EXPECT_EQ(FindRepeating("1337"), std::vector>({{"1", "0", "0", "1"}, {"3", "1", "2", "2"}, {"7", "3", "3", "1"}}));
EXPECT_EQ(FindRepeating("aabbbaabbb"), std::vector>({{"a", "0", "1", "2"}, {"b", "2", "4", "3"}, {"a", "5", "6", "2"}, {"b", "7", "9", "3"}}));
EXPECT_EQ(FindRepeating("addressee"), std::vector>({{"a", "0", "0", "1"}, {"d", "1", "2", "2"}, {"r", "3", "3", "1"}, {"e", "4", "4", "1"}, {"s", "5", "6", "2"}, {"e", "7", "8", "2"}}));
EXPECT_EQ(FindRepeating("1111222233334444"), std::vector>({{"1", "0", "3", "4"}, {"2", "4", "7", "4"}, {"3", "8", "11", "4"}, {"4", "12", "15", "4"}}));
EXPECT_EQ(FindRepeating("1000000000000066600000000000001"), std::vector>({{"1", "0", "0", "1"}, {"0", "1", "13", "13"}, {"6", "14", "16", "3"}, {"0", "17", "29", "13"}, {"1", "30", "30", "1"}}));
نظرات