LeetCode 3. Longest Substring Without Repeating Characters (C语言)

这里写图片描述


意思是求出一个给定字符串中的最长子串的长度,子串里边不能有相同字符。


这个题事先没有看Resolution,所以解得比较粗糙。 不过跑出来结果还可以。

这里写图片描述

跑出结果之后,看了下Resolution的参考算法,然后看了下最小时间10ms那位大神的实现。关键点是需要用hash表来存储一遍数组下标,即把两个嵌套的循环分别处理为两个连续的循环,使O(n^2)变成O(n),跟第一题addTwo差不多做法。 下边贴下我的实现,最优的算法请自行去LeetCode查看。

int lengthOfLongestSubstring(char* s) {
    if(s == NULL || strlen(s) == 0)
        return 0;

    char* p = s;
    int len = strlen(s) + 1;
    char* subString = (char*)malloc(len * sizeof(char));
    memset(subString,0,len);

    //     [a , b ,c , d  ,v , d  ,x , y ,d ,z]
    //     |           |       |
    //first           cur     end
    int pFirstIndex = 0; //找到一个相同字符时,要求的curIndex那个字符的长度,是前边加后边
    int pCurIndex = 0; //p移动到了多少位置
    int pEndIndex = 0;//第二个找到的字符的位置

    int i = 0; //子字符串下标
    int max = 0;//找到的重复的字符串的长度,作为返回值
    while(pEndIndex < len-1){//遍历数组
        for(int j= pFirstIndex; j < i; j++){
            if(subString[j] == p[pEndIndex]){
                //if(pFirstIndex == 0)
                    pCurIndex = j;

                //printf("f=%d,c=%d,e=%d\n",pFirstIndex,pCurIndex,pEndIndex);

                if((pCurIndex - pFirstIndex) + (pEndIndex - pCurIndex) > max)
                    max = (pCurIndex - pFirstIndex) + (pEndIndex - pCurIndex);


                pFirstIndex = pCurIndex + 1;
                //printf("get max = %d,f=%d\n",max,pFirstIndex);
            }
        }
        subString[i++] = p[pEndIndex++];
    }
    //printf("e=%d,f=%d\n",pEndIndex,pFirstIndex);
    if((pEndIndex - pFirstIndex) > max){
        max = (pEndIndex - pFirstIndex); //最后那一段的数据的长度,因没有找到一个一样的,所以是直接就是那个长度
        //printf("max2 = %d\n",max);
    }
    return max;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值