一、题解
可以设置一个记录第一次出现字母的位置,然后循环一遍字符串对相同字母的位置减去初始位置,这样时间复杂度为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;
}
};
本文提供两种C++实现方式来解决寻找字符串中相同字符间最长距离的问题:一种通过记录首次出现位置降低时间复杂度至O(n),另一种采用暴力循环方式,时间复杂度为O(n*n)。
349

被折叠的 条评论
为什么被折叠?



