C++语言算法之求任意两个相同字符的最大距离

提问

我们有一个这样的字符串abcaffdffqwwwwrcs,最大长度的多少呢?我们发现两个c直接的距离最大,这里最大长度应该是第2个c的位置-第一个c的位置。

算法思路

下面来讲一下算法是实现思路:
先来看看,我们如何求第一个字母a之间的距离,我们先确定a的位置是第一个,我们用一个变量保存a的位置,然后再通过下标移动到底2个a的位置,只需要将第二个位置减去第一个位置即可,这就得到了两个字母之间的距离。
那么问题来了,我们一个字符串有这么的多字符,那么我们如何存放每个字符的位置。这里只需要将每个字符的位置记录在一个数组中,用字符的ascii码作为数组的下标,然后通过这个下标来访问,直接记录或者读取数组记录的位置。
这时候我们每个字符的位置都能记录,但是这个时候,如何求任何两个字符直接的距离,我们需要一个变量来记录最大距离,通过任何两个字符之间的距离与这个变量比较,如果遇到更远的,就记录在这个变量中,直达整个字符串都读取一遍。

算法实现

//C++实现方法
public:
    static int lengthOfLongestSubstring(String s){
        vector<int> dict(256,-1);
        int maxLen = 0,start = -1;
        for(int i = 0;i<s.length();i++){
            if(dict[s[i]] > -1){
                start = dict[s[i]];
                maxLen  = max(maxLen,i-start)'
            }
            dict[s[i]] = i;
        }
        return max;
    }
//C语言实现方法
int lengthOfLongestSubstring(const char * str) {
    int dict[256];
    int i = 0;
    for (; i<256; i++) {
        dict[i] = -1;
    }
    int maxLen = 0;
    for (i = 0; i < strlen(str); i++) {
        if (dict[str[i]]>-1) {
            maxLen = max(maxLen, i - dict[str[i]]);
        }
        dict[str[i]] = i;
    }
    return maxLen;
}

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/79654202