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

本文共 1700 字,大约阅读时间需要 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提高效率。

待完善....

转载地址:http://wqlpa.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>