一、题解
可以设置一个记录第一次出现字母的位置,然后循环一遍字符串对相同字母的位置减去初始位置,这样时间复杂度为O(n)。
也可以暴力循环,时间复杂度O(n*n)。
二、C++代码
1、记录初始位置
class Solution {
public:
int maxLengthBetweenEqualCharacters(string s) {
vector<int> firstIndex(26, -1);
int maxLength = -1;
for (int i = 0; i < s.size(); i++) {
if (firstIndex[s[i] - 'a'] < 0) {
firstIndex[s[i] - 'a'] = i;
} else {
maxLength = max(maxLength, i - firstIndex[s[i] - 'a'] - 1);
}
}
return maxLength;
}
};
2、暴力循环
class Solution {
public:
int maxLengthBetweenEqualCharacters(string s) {
int maxL=-1;
for(int i=0;i<s.size();i++){
for(int j=i+1;j<s.size();j++){
if(s[j]==s[i]) maxL=max(maxL,j-1-i);
}
}
return maxL;
}
};