博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ leetcode Longest Substring Without Repeating Characters
阅读量:6643 次
发布时间:2019-06-25

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

要开学了,不开森。键盘声音有点大,担心会吵到舍友。今年要当个可爱的技术宅呀~

题目:Given a string, find the length of the longest substring without repeating characters.

Examples:  Given "abcabcbb", the answer is "abc", which the length is 3.

第一反应的解法,直接贴代码吧,38ms的运行时间,击败58%。

class Solution {public:    int lengthOfLongestSubstring(string s) {        string result("");  //用来存储目前没有重复的子串        int tmp = 0;      //没有重复字母子串的最大长度        int now = 0;        for(int i = 0; i != s.size(); i++){            int pos = -1;            if ( (pos = result.find(s[i]) )== -1)                   result = result + s[i];                            else{                tmp = result.size()>tmp?result.size():tmp;                result = (pos+1==result.size()?"":result.substr(pos+1)) + s[i];             }        }        return result.size()>tmp?result.size():tmp;    }};

  很简单的解法,我却写了蛮久的,因为对string不熟悉,而且没考虑越界,学到了两个string的成员函数,一个是find(),另一个是截取子串的函数substr()。自己最智障的地方就是截取子串的时候索引写错了竟然一直都没反应过来,哎,脑子真是个好东西啊。

  速度很慢,想把字符串转成hash函数做,但是没想好具体的解法。看一眼大神的,6ms的,有想法了。OK~23ms,击败了65%,下面这个代码和原来的代码算法相似,都是用滑动窗口的做法,但是下面这个解法将find()函数改成了用hash表实现,节省了遍历原串时在子串中查找有没有这个字母的时间,而且将找到现在情况下的最长子串不赋值给一个新的string,只用指针start标注该子串在原串中的起始位置,节省了赋值时间。不过更新start值时,直接将该字母出现的前一个位置+1赋给了start,没有考虑现在子串的起始位置,照这个bug找了好久,脑子啊,我什么时候才能有啊!哭唧唧!但是明明和大神解法一样,怎么测试时间差这么多?喵喵喵?

class Solution {public:    int lengthOfLongestSubstring(string s) {    int flag[256];    int start = 0;    int longest = 0;    for (int i = 0; i <256; i++)        flag[i] = -1;    int i;    for(i = 0; i< s.size(); i++){        if (flag[s[i]] != -1)                                start = (flag[s[i]] + 1)>start?flag[s[i]]+1:start;            longest = longest >= (i-start+1)?longest:(i-start+1);        flag[s[i]] = i;    }    return longest;    }};

  好啦,水完了今天的博客和LeetCode~找饭吃~

 

转载于:https://www.cnblogs.com/catpainter/p/8466102.html

你可能感兴趣的文章
大文件分割 - split
查看>>
光照模型与面绘制算法---OpenGL光照和表面绘制函数
查看>>
系统文件的损坏导致Windows XP连续重启的解决方案
查看>>
lvs的dr和nat模式配置备忘
查看>>
数据库小知识点
查看>>
北京点击科技有限公司董事长兼总裁——王志东经典语录5
查看>>
书籍推荐
查看>>
Linux误删home目录下的用户目录恢复
查看>>
敏捷安全10法
查看>>
saltstack 安装mysql
查看>>
学习数据仓库
查看>>
PHP ADOdb
查看>>
python list查询及所需时间
查看>>
通过PXE自动安装FreeBSD
查看>>
定制linux自动化安装镜像
查看>>
我的友情链接
查看>>
cacti监控NginxStatus并发状态汇总
查看>>
Samba服务器相关配置及实验过程
查看>>
STL源码剖析读书笔记之vector
查看>>
[2005.07.11 18:29:03] The experience I got in last week
查看>>