C2. 滑动窗口
2020-06-22 本文已影响0人
开源519
用途: 用于解决找出符合某条件连续的数据。
1. 即在解决数组遍历问题时,利用其遍历的起点与终点。
2. 利用其数组内元素ascall和当前位置(或出现的次数)建立新数组。新数组下标为该字符ascall、大小为出现的位置或次数。
3.利用一次循环筛选出符合特定条件的连续数据。
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
源码:
/* "abcabcbb" */
#include <string.h>
int lengthOfLongestSubstring(char * s){
int string[128] = { -1, -1 };
int i = 0, max_len = 0, start = 0;
memset(string, -1, sizeof(string));
for(i = 0; s[i] != 0; i++){
if(string[s[i]] < start) { //忽略起点之前的坐标信息
int temp_len = i - start + 1;
if(temp_len > max_len) {
max_len = temp_len;
}
} else { //遇见重复的字母
start = string[s[i]] + 1; //重置起点坐标
}
string[*(s+i)] = i; //不断更新字母坐标信息
}
return max_len;
}
2020-06-22
记录历经的路,分享个人总结与感悟。欢迎关注公众号“嵌入式漫漫修道路”获取学习资料及经验文档,也欢迎与笔者共同探究技术问题。
个人总结,转载请标明出处及链接,谢谢!
在看你就赞赞我!
image