2981. Find Longest Special Substring That Occurs Thrice I
Difficulty: Medium
Topics: Hash Table
, String
, Binary Search
, Sliding Window
, Counting
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 = "abcdef"
- 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 <= 50
-
s
consists of only lowercase English letters.
Hint:
- The constraints are small.
- Brute force checking all substrings.
Solution:
We can use a brute force approach due to the small constraints of s
(length of up to 50). We'll:
- Iterate over possible lengths of substrings (from longest to shortest).
- Check all substrings of the given length and count their occurrences.
- If a substring occurs at least three times, check if it is special (made of one repeated character).
- Return the length of the longest such substring. If no substring satisfies the conditions, return
-1
.
Let's implement this solution in PHP: 2981. Find Longest Special Substring That Occurs Thrice I
<?php
/**
* @param String $s
* @return Integer
*/
function maximumLength($s) {
...
...
...
/**
* go to ./solution.php
*/
}
/**
* Helper function to check if a substring is special
*
* @param $substring
* @return bool
*/
function isSpecial($substring) {
...
...
...
/**
* go to ./solution.php
*/
}
// Test cases
echo maximumLength("aaaa") . "\n"; // Output: 2
echo maximumLength("abcdef") . "\n"; // Output: -1
echo maximumLength("abcabcabc") . "\n"; // Output: 1
?>
Explanation:
- Outer Loop: We iterate over the possible lengths of substrings, starting with the longest. This ensures we return the longest special substring as soon as we find it.
- Sliding Window: For each substring length, we use a sliding window approach to extract all substrings of that length.
-
Counting Substrings: We use an associative array (
$countMap
) to store and count occurrences of each substring. -
Checking Special: A helper function
isSpecial
checks if the substring is made up of only one repeated character. -
Returning the Result: If a valid substring is found, we return its length; otherwise, we return
-1
.
Complexity
-
Time Complexity: O(n3) in the worst case because we:
- Iterate over n substring lengths.
- Extract O(n) substrings for each length.
- Check if each substring is special, which takes O(n) time.
- Space Complexity: O(n2) due to the substring counting map.
This brute force approach is feasible given the constraints (n <= 50).
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me:
Top comments (0)