3266. Find Longest Special Substring That Occurs Thrice II

Medium
Hash Table
String
Binary Search
Sliding Window
Counting

Description

You are given a string s that consists of lowercase English letters.

A string is called special if it is made up of only a single character. For example, the string "abc" is not special, whereas the strings "ddd", "zz", and "f" are special.

Return the length of the longest special substring of s which occurs at least thrice, or -1 if no special substring occurs at least thrice.

A substring is a contiguous non-empty sequence of characters within a string.

 

Example 1:

Input: s = "aaaa"
Output: 2
Explanation: The longest special substring which occurs thrice is "aa": substrings "aaaa", "aaaa", and "aaaa".
It can be shown that the maximum length achievable is 2.

Example 2:

Input: s = "abcdef"
Output: -1
Explanation: There exists no special substring which occurs at least thrice. Hence return -1.

Example 3:

Input: s = "abcaba"
Output: 1
Explanation: The longest special substring which occurs thrice is "a": substrings "abcaba", "abcaba", and "abcaba".
It can be shown that the maximum length achievable is 1.

 

Constraints:

  • 3 <= s.length <= 5 * 105
  • s consists of only lowercase English letters.

Hints

Hint 1
Let <code>len[i]</code> be the length of the longest special string ending with <code>s[i]</code>.
Hint 2
If <code>i > 0</code> and <code>s[i] == s[i - 1]</code>, <code>len[i] = len[i - 1] + 1</code>. Otherwise <code>len[i] == 1</code>.
Hint 3
Group all the <code>len[i]</code> by <code>s[i]</code>. We have at most <code>26</code> groups.
Hint 4
The maximum value of the third largest <code>len[i]</code> in each group is the answer.
Hint 5
We only need to maintain the top three values for each group. You can use sorting, heap, or brute-force comparison to find the third largest value in each group.

Statistics

Acceptance
38.9%
Submissions
79,085
Accepted
30,773