两个相同字符之间的最长子字符串的长度

一.题目

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;
}
posted @ 2022-09-17 21:38  彭乐祥  阅读(10)  评论(0编辑  收藏  举报