LeetCode--3. 无重复字符的最长子串(双指针)
无重复字符的最长子串(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. 无重复字符的最长子串(双指针)相关推荐
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- [leetcode] 3.无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- LeetCode 3:无重复字符的最长子串 思考分析
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode之无重复字符的最长子串
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "ab ...
- leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters
关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...
- LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)
3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...
- leetcode -- 3.无重复字符的最长子串
内容描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. class Solution(object):def lengthOfLongestSubstring(self, s):& ...
最新文章
- html5声频audio和视频video
- pytorch 网络可视化
- 家庭接入: dsl 电缆ftth 拨号和卫星_家庭宽带的路由器升级之路
- Linux C高级编程——时间编程
- VC++的学习(基于VS2008)——windows程序内部运行机制
- Therenbsp;isnbsp;nonbsp;resul…
- Pytorch——DataLoader的学习笔记~
- python编程是啥-Python编程
- UNIGUI中如果获得Session情况
- 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
- 永磁无刷直流电机的分类与区别
- 查看浏览器占有的市场份额
- 绕过CDN查找真实IP的方法总结
- python实现将图像合成GIF图
- 数据库管理系统(基于前端+后端+数据库)
- 个人分享选择工作时的一些注意事项
- 查看Python文档的几种方法
- 图片编辑用什么软件?快把这些软件收好
- 今夜,让我静静地想你……
- 论文查重后会不会被泄露?
热门文章
- Nginx服务器之负载均衡策略(6种)
- 远程网络教育计算机统考试题及答案,2019年电大远程网络教育计算机应用基础统考题库真题试题附全答案...
- java多线程 文件夹_Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合
- python闹钟界面程序_「Python编程」自由管理时间之编写一个小闹钟起床
- elcentro matlab,EL-Centro地震波积分计算与基线调整.docx
- python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
- BootstrapTable自定义ajax方法
- 吴恩达深度学习笔记 2.6~2.9 logistic中的梯度下降
- 记一次修改redis需要外部访问
- jmeter+ant+jenkins的自动化接口测试