21xrx.com
2024-11-22 07:28:24 Friday
登录
文章检索 我的文章 写文章
C语言实现找出字符串最长不重复子串
2023-06-15 10:31:43 深夜i     --     --
字符串 最长不重复子串 C语言 滑动窗口 遍历 重复字符

找出字符串最长不重复子串是算法中比较常见的问题,本文将介绍如何用C语言实现这个算法。首先,我们需要先了解什么是字符串最长不重复子串。字符串最长不重复子串指的是一个字符串中最长的子串,该子串中的每个字符都不重复,也就是说,该子串中任意两个字符都不相同。

实现该算法的思路是:使用滑动窗口来遍历整个字符串,每次遍历都记录当前的子串,并且对子串进行判断是否有重复字符。如果没有重复字符,就可继续向右滑动窗口,记录更长的子串长度。如果有重复字符,就向右移动子串起始位置,重新记录子串。

实现该算法的代码如下:


#include

#include

int findLongestSubstring(char* str){

  int len = strlen(str);

  int visited[256];

  int maxLength = -1;

  int start = 0;

  memset(visited, -1, sizeof(visited));

  for(int i = 0; i < len; i++){

    if(visited[str[i]] != -1 && visited[str[i]] >= start){

      start = visited[str[i]] + 1;

    }

    visited[str[i]] = i;

    maxLength = (maxLength > i - start + 1) ? maxLength : i - start + 1;

  }

  return maxLength;

}

int main(){

  char str[] = "abcabcbb";

  int maxLength = findLongestSubstring(str);

  printf("最长不重复子串的长度为:%d\n", maxLength);

  return 0;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复