无重复字符的最长子串(C)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现

1. 题目描述

难度:中等

2. 题目分析

这道题目是一道中等难度的题目,我们需要知道的有一点:

  • 字符串中有包括空字符的所有字符,不止英文字母
    这一点很重要,因为在刚接触这道题的时候,很容易当成字符串中只有英文字符,这在使用ASCII码的时候会有麻烦。

这道题当然可以使用暴力穷举法,求出所有可能的字符串,并选出合适的字符串并输出最大长度,这么做的话时间复杂度太高了。有一种方法可以使时间复杂度为O(n),那就是双指针法。

  • 双指针法
    定义两个指针,一个头指针用来指向字符串的头,一个指针用来滑动。申请一个128个元素的数组空间,用来表示当前字符串是否有重复的元素。为什么大小为128?因为根据ASCII码表,一共有128个元素(包含空元素)。举个例子:如果滑动指针指向的是字符‘a’,该字符对应的ASCII码表为97,所以在新建的数组的下标为97的空间存储为1。滑动指针滑动的时候,一直判断指向的元素所对应的新建数组中的元素是否为1,如果是1那么表示该元素在之前已经初出现,如果是0,表示该元素在之前并没有出现。具体代码见第三节。

3. C语言实现

代码如下:

int lengthOfLongestSubstring(char * s){/***参数列表:i:滑动指针; index:头指针; len:字符串长度; label:字符对应的下标; max: 字符串长度最大值count: 滑动过程中字符串的长度***/int i, index, len, max, label, count;// 初始化变量以及申请数组空间max = 0;count = 0;index = 0;len = strlen(s);int *temp = (int *)malloc(sizeof(int)*128);// 开始循环for(i = 0; i < len; i++){label = (int)(s[i]);// 如果字符之前没有出现if(temp[label] != 1){// 在相应的位置上置1,长度加一temp[label] = 1;count++;}// 如果字符在之前已经出现else{// 将头指针移动得到重复字符的后一位while(s[index] != s[i]){temp[(int)(s[index])] = 0;index++;} index++;count = i - index + 1;}// 更新最大长度值max = max>count?max:count;}return max;
}

运行结果为:

LeetCode--3. 无重复字符的最长子串(双指针)相关推荐

  1. [贪心|字符串] leetcode 3 无重复字符的最长子串

    [贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...

  2. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  3. LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)

    1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  4. [leetcode] 3.无重复字符的最长子串

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  5. LeetCode 3:无重复字符的最长子串 思考分析

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  6. LeetCode之无重复字符的最长子串

    1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "ab ...

  7. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

  8. LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)

    3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...

  9. leetcode -- 3.无重复字符的最长子串

    内容描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. class Solution(object):def lengthOfLongestSubstring(self, s):& ...

最新文章

  1. html5声频audio和视频video
  2. pytorch 网络可视化
  3. 家庭接入: dsl 电缆ftth 拨号和卫星_家庭宽带的路由器升级之路
  4. Linux C高级编程——时间编程
  5. VC++的学习(基于VS2008)——windows程序内部运行机制
  6. Therenbsp;isnbsp;nonbsp;resul…
  7. Pytorch——DataLoader的学习笔记~
  8. python编程是啥-Python编程
  9. UNIGUI中如果获得Session情况
  10. 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
  11. 永磁无刷直流电机的分类与区别
  12. 查看浏览器占有的市场份额
  13. 绕过CDN查找真实IP的方法总结
  14. python实现将图像合成GIF图
  15. 数据库管理系统(基于前端+后端+数据库)
  16. 个人分享选择工作时的一些注意事项
  17. 查看Python文档的几种方法
  18. 图片编辑用什么软件?快把这些软件收好
  19. 今夜,让我静静地想你……
  20. 论文查重后会不会被泄露?

热门文章

  1. Nginx服务器之负载均衡策略(6种)
  2. 远程网络教育计算机统考试题及答案,2019年电大远程网络教育计算机应用基础统考题库真题试题附全答案...
  3. java多线程 文件夹_Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合
  4. python闹钟界面程序_「Python编程」自由管理时间之编写一个小闹钟起床
  5. elcentro matlab,EL-Centro地震波积分计算与基线调整.docx
  6. python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
  7. BootstrapTable自定义ajax方法
  8. 吴恩达深度学习笔记 2.6~2.9 logistic中的梯度下降
  9. 记一次修改redis需要外部访问
  10. jmeter+ant+jenkins的自动化接口测试