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

本文共 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://nflja.baihongyu.com/

你可能感兴趣的文章
Ubuntu 无法mount解决办法
查看>>
详解 Discuz 的 PHP经典加密解密函数 authcode
查看>>
使用curl命令查看访问url的时间
查看>>
WinForm中跨线程操作控件
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
Flymeos插桩适配教程
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
高仿Instagram 页面效果android特效
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>