一.题目
![](https://img2022.cnblogs.com/blog/2177087/202209/2177087-20220917213815065-1188097640.png)
1.缩短指针的距离
int maxLengthBetweenEqualCharacters(char * s){
int length=strlen(s);
int right=length-1;
int temp;
int left;
while(right>0){
temp=right;
left=0;
for(int i=right;i<=length-1;i++){
if(s[left]==s[temp])
return (temp-left)-1;
left++;
temp++;
}
right--;
}
return -1;
}
2.评论区看到的思路。
//用hash表的思想解
int maxLengthBetweenEqualCharacters(char * s){
int hash[26];
//hash表0--25的下表代表a--z
for(int i=0;i<26;i++)
{
hash[i]=-1;
}
int length=strlen(s);
int max=-1;
for(int i=0;i<length;i++)
{
if(hash[s[i]-'a']==-1)
{//记录hash表对应字母在s中第一次出现的位置
hash[s[i]-'a']=i;
}
else
{//寻找s中的字母是否记录在hash表中,
//如果存在,用当前下标减去hash表中对应的字母的下标
//就是两个相同字符之间的最长子字符串的长度
int tmpsize=i-hash[s[i]-'a']-1;
max=max<tmpsize?tmpsize:max;
}
}
return max;
}