码迷,mamicode.com
首页 > 其他好文 > 详细

Longest Substring Without Repeating Characters - 模拟与哈希

时间:2015-06-29 00:23:08      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

题意很简单,就是寻找一个字符串中连续的最长包含不同字母的子串。

其实用最朴素的方法,从当前字符开始寻找,找到以当前字符开头的最长子串。这个方法猛一看是个n方的算法,但是要注意到由于字符数目的限制,其实这是个O(Cn)的算法,最长也不过是C长度。所以我觉得普通方法应该是能过的。

于是写了一个,字符数目最大也不超过256所以代码如下:

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4 
 5         int res=0;
 6         for(int i=0;i<s.length();i++)
 7         {
 8             int flag[200];
 9             memset(flag,0,sizeof(flag));
10             int count = 0;
11             flag[s[i]- ] = 1;
12             int tempres = 1;
13             for (int j = i + 1; j < s.length(); j++) {
14                 if (flag[s[j]- ]==0) {
15                     flag[s[j]- ]= 1;
16                     tempres++;
17                 } else
18                     break;
19             }
20             if (tempres > res)
21                 res=tempres;
22         }
23         return res;
24     }
25 };

其中空格是ASCII码第一个实际意义字符,所以减去‘ ’

正常的O(n)方法是使用哈希表来存已经出现的字符,使用一个指针依次检索,如果碰到已经存在的字符,则去使用第二个指针更新这个哈希表。

 

Longest Substring Without Repeating Characters - 模拟与哈希

标签:

原文地址:http://www.cnblogs.com/holyprince/p/4606343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!