Longest Substring Without Repeating Characters
2015-06-08 15:12
323 查看
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
看到这题最直接的估计就是枚举法了,每次检验一个字符是否已经在子串中就一个一个对比,然后添加.明显复杂度高了.
然后就可以考虑类似哈希表的解决方案,(前提说下,在LEETCODE判定中大小写估计也是不一样的字符)ascii码总共256个可以申请一个相同大小数组,记录子串中已经出现的字符(比如 如果出现就将其位值变为1,当然使用时你要初始化).
然后使用双指针来选出子串,双指针形象点就像一双筷子,夹在筷子中间的就是现在正在测试的子串了,如果出现重复的字符,就计算这次子串的长度temlen然后与maxlen进行对比,选大的作为maxlen值.最后开始准备下次测试的子串,需要 将头指针移到重复字符的后一位置,同时将hash表中的移动过程中的相应字符位初始化.
代码如下:
看到这题最直接的估计就是枚举法了,每次检验一个字符是否已经在子串中就一个一个对比,然后添加.明显复杂度高了.
然后就可以考虑类似哈希表的解决方案,(前提说下,在LEETCODE判定中大小写估计也是不一样的字符)ascii码总共256个可以申请一个相同大小数组,记录子串中已经出现的字符(比如 如果出现就将其位值变为1,当然使用时你要初始化).
然后使用双指针来选出子串,双指针形象点就像一双筷子,夹在筷子中间的就是现在正在测试的子串了,如果出现重复的字符,就计算这次子串的长度temlen然后与maxlen进行对比,选大的作为maxlen值.最后开始准备下次测试的子串,需要 将头指针移到重复字符的后一位置,同时将hash表中的移动过程中的相应字符位初始化.
代码如下:
int lengthOfLongestSubstring(char* s) { int hash[256] ={0}; char *head , *ptr ; head = ptr = s; int temlen , maxlen ; int i ; temlen = maxlen = 0 ; while(*ptr!='\0') { if(hash[ *ptr - ' '] ==0 ) { hash[*ptr - ' ']= 1; ptr++; } else { temlen = ptr - head ; maxlen =maxlen>temlen?maxlen : temlen; for( ;*head != *ptr ;head++) hash[*head -' '] = 0 ; hash[*head -' '] =0; head++; } } temlen = ptr - head ; maxlen =maxlen>temlen?maxlen : temlen; return(maxlen); }
相关文章推荐
- 安装 php
- 根据view得到controller
- 根据分数返回等级代码实现方式
- ora-12638: credential retrieval failed
- JVM -verbose参数详解
- stm32 swd下载设置
- java http 链接超时判断(转)
- WPF好看的进度条实现浅谈(效果有点类似VS2012安装界面)
- MS SQL Server 常用操作
- 15.6.8-sql小技巧
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Eclipse打JAR包,插件FatJar安装与使用
- SQL 语言划分
- MVC捕获数据保存时的具体字段验证错误代码
- MySQL主从复制
- 树后台数据存储(采用webmethod)
- HM NIS Edit 一步一步生成 NSIS脚本教程
- PHP 配置上传大文件
- spring mvc 基于maven的完整demo
- ListView和ListActivity