C语言

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
上一篇 下一篇

猜你喜欢

热点阅读