1. 用C写一个给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度的代码
时间: 2024-09-18 18:17:21 浏览: 51
在C语言中,你可以使用滑动窗口的方法来解决这个问题。滑动窗口是一种常用的动态规划思想,用于处理数组/字符串中的连续子序列问题。以下是一个简单的代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX_CHAR 128
// 函数声明
int lengthOfLongestSubstring(char* s);
// 主函数
int main() {
char str[] = "pwwkew";
int result = lengthOfLongestSubstring(str);
printf("The length of the longest substring without repeating characters is: %d\n", result);
return 0;
}
// 滑动窗口函数
int lengthOfLongestSubstring(char* s) {
int n = strlen(s);
bool window[MAX_CHAR] = {false}; // 窗口状态数组,初始化为false
int left = 0, right = 0, maxLength = 0; // 左指针、右指针和最长子串长度
while (right < n) {
if (!window[s[right]]) { // 如果当前字符不在窗口内
window[s[right]] = true; // 标记为已访问
right++; // 移动右指针
maxLength = max(maxLength, right - left); // 更新最长子串长度
} else { // 当前字符在窗口内
window[s[left]] = false; // 将左边界对应的字符标记为未访问
left++; // 移动左指针
}
}
return maxLength;
}
// 辅助函数计算两个整数的最大值
int max(int a, int b) {
return a > b ? a : b;
}
阅读全文