博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-无重复字符的最长子串
阅读量:6418 次
发布时间:2019-06-23

本文共 1752 字,大约阅读时间需要 5 分钟。

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

思路:

  1. 从字符串第一个元素起,从左到右获取子串。
  2. 每前进一个字符(下标为j),就在当前子串中查找是否存在与当前字符重复的字符,如果存在(重复字符的下标为i),那么能确定一个包含不重复字符的子串,其长度为j - i 对比已存储的最大长度并把两者的最大值存储。
  3. 现在下一个子串的起点为当前重复的字符下标j.重复执行2、3操作,直到最后一个字符。

其实这是滑动窗口的思路。左闭右开。

int lengthOfLongestSubstring(char* s) {    int len = strlen(s);    //长度为0 的情况的处理    if(len == 0) return 0;    int max = 1;    int statrIndex = 0;    for (int i = 1; i < len; i ++) {        char subStr = s[i];        for(int j = statrIndex; j 

其他解法:

//每个字符都有唯一字符串ASCII的作为唯一标识,这是个技巧性问题。最多256个int lengthOfLongestSubstring(char* s) {    //算法:用book标记出现过的字符的index,用max标记最大长度,用start标记当前不重复开始的index,用num表示当前不重复的个数    //遍历数组,若book[]大于start,说明遇到相同元素,则从其相同处重新计算长度和起始位置    if(NULL == s)        return NULL;    int len=strlen(s);    int book[255]={0};    //memset(book,0xff,255*sizeof(int));//将book初始化为-1    if (0==len)        return 0;    int start=0,max=0;//max_start=0;    int num=0;    for (int i=0;i
max) { //max_start=start; max=num; } book[s[i]]=i+1; } else { start=book[s[i]]; num=i-start+1; book[s[i]]=i+1; } } return max;}复制代码
//写得好屌啊int lengthOfLongestSubstring(char* s) {    int len=0;    char *end=s,*temp;    char* addressTable[128]={NULL};    while(*end){        temp = addressTable[*end];        addressTable[*end]=end;        if(temp>=s){        len=end-s>len?end-s:len;        s = temp+1;        }end++;    }    len=end-s>len?end-s:len;    return len;}复制代码

小结:这里又存在查找问题,可以考虑使用哈希Map提高效率。

待完善....

转载于:https://juejin.im/post/5b40718d6fb9a04fdb169bd2

你可能感兴趣的文章
centos7安装redis
查看>>
EF 约定介绍
查看>>
web 服务发布注意事项
查看>>
http缓存详解
查看>>
简单内存映射
查看>>
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web mod
查看>>
3度带6度带区别、中央经线及带号的计算
查看>>
[CentOs7]安装mysql
查看>>
linux 安装redis4.0
查看>>
Codeforces Round #257 (Div. 2)
查看>>
Linux查找文件的相关命令
查看>>
FastDFS 集群 安装 配置
查看>>
pyhon学习<文件操作>
查看>>
导航下拉菜单
查看>>
TSS 任务状态段 详解
查看>>
【二项式定理】【推导】计蒜客17115 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin...
查看>>
【并查集】bzoj1015 [JSOI2008]星球大战starwar
查看>>
ehCache+spring的简单实用
查看>>
纯CSS3代码实现表格奇偶行异色,鼠标悬浮变色
查看>>
这一周吃什么呢?
查看>>