Problem
Given a string s
, return the length of the longest substring between two equal characters, excluding the two characters. If there is no such substring return -1
.
A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s = "aa"
Output: 0
Explanation: The optimal substring here is an empty substring between the two 'a's.
Example 2:
Input: s = "abca"
Output: 2
Explanation: The optimal substring here is "bc".
Example 3:
Input: s = "cbzxy"
Output: -1
Explanation: There are no characters that appear twice in s.
Constraints:
1 <= s.length <= 300
s
contains only lowercase English letters.
Solution
/**
* @param {string} s
* @return {number}
*/
var maxLengthBetweenEqualCharacters = function(s) {
var leftPosMap = Array(26);
var rightPosMap = Array(26);
var a = 'a'.charCodeAt(0);
for (var i = 0; i < s.length; i++) {
var j = s[i].charCodeAt(0) - a;
if (leftPosMap[j] === undefined) leftPosMap[j] = i;
rightPosMap[j] = i;
}
var max = -1;
for (var m = 0; m < 26; m++) {
if (leftPosMap[m] !== rightPosMap[m]) {
max = Math.max(max, rightPosMap[m] - leftPosMap[m] - 1);
}
}
return max;
};
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(1).