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

13 篇文章 0 订阅
13 篇文章 1 订阅

提问

我们有一个这样的字符串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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值