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

【LeetCode】003 Longest Substring Without Repeating Characters

时间:2015-04-26 18:15:18      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

题目:LeetCode 003 Longest Substring Without Repeating Characters

题意:给一个字符串,找到一个没有重复字符的最长子串。

样例:”bbbbb” 返回”b”的长度1;”abcabcbb”返回”abc”的长度3。

 

思路:

动态规划。dp[i]表示以第i个字符为结尾的无重复字符的子串的最长的长度,需要一个辅助数组idx[s[i]]记录字符当前字符s[i]上一次出现的位置,如果未出现过则为-1。所以得到如下的递推公式:

技术分享

另外由于不确定字符串长度的范围,所以利用滚动数组实现。dp[i&1]由dp[(i-1)&1]推导而来。

代码如下:

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         int len = s.length();
 5         if(len == 0) return len;
 6         int ans = 1, idx[300], dp[2];
 7         memset(idx, -1, sizeof(idx));
 8         dp[0] = 1;
 9         idx[s[0]] = 0;
10         for(int i = 1; i < len; i++)
11         {
12             if(idx[s[i]] == -1)
13                 dp[i&1] = dp[(i-1)&1]+1;
14             else
15                 dp[i&1] = min(i-idx[s[i]], dp[(i-1)&1]+1);
16             idx[s[i]] = i;
17             ans = max(ans, dp[i&1]);
18         }
19         return ans;
20     }
21 };

 

【LeetCode】003 Longest Substring Without Repeating Characters

标签:

原文地址:http://www.cnblogs.com/kathyrine/p/4457996.html

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