【牛客刷题】最长不含重复字符串的子字符串

文章目录

  • 前言
  • 一、题目描述
  • 二、题解描述
  • 三. 代码实现
  • 总结


前言

有空多刷题!!!


一、题目描述

【牛客刷题】最长不含重复字符串的子字符串_第1张图片

二、题解描述

  1. 搞两个指针,和搞一个计数变量;保证两个指针间的数据没有重复字符,记录长度;
  2. 要是右指针走的过程中碰到了左右指针相同字符(字母)的话,更新左指针到相同字符的下一个字符,然后右指针再开始走,而且计数变量慢慢更新;
  3. 我这里把判断是否有重复字符封装成了一个函数,没有就返回-1,有的话就返回相同字符下一个字符下标;

三. 代码实现

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param s string字符串
 * @return int整型
 */
int issame(char* s, int left, int right) {
    while (left < right) {
        if (s[left] == s[right])
            return left + 1;
        ++left;
    }
    return -1;
}
int lengthOfLongestSubstring(char* s ) {
    // write code here
    int n = strlen(s);
    int  count=1,prev = 0, ret = 1;
    int cur = 1;
    while (cur < n) {
        while (cur < n && (issame(s, prev, cur) == -1)) {
            count=cur-prev+1;//慢慢更新长度
            ++cur;
        }
        if(count>ret)//记录最长的长度
        ret=count;
        if(cur==n)
        break;
        prev=issame(s,prev,cur);
        ++cur;

    }
    return ret;
}

总结

有空多刷题哈!!!

你可能感兴趣的:(牛客网刷题,c++,算法,开发语言,c语言)