leetcode 3 Longest Substring Without Repeating Characters

该博客给出一个解决方案,指出字符不仅包含英文字母,char字符不多于256个,数组范围设为256即可。以O(n)扫描字符串,每遇到相同字符就比对max。

solution:

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4       std::vector<bool> v(256, false);
 5       int len = s.length();
 6       int l=0, ans=0;
 7       for (int i = 0; i < len; ++i) {
 8         int tmp = s[i]-0x0;
 9         if (v[tmp] == true) {
10           ans = std::max(ans, i-l);
11           while (l < i) {
12             if (s[l] == s[i]) {
13               ++l;
14               break;
15             } else {
16               v[s[l]-0x0] = false;
17             }
18             ++l;
19           }
20         } else {
21           v[tmp] = true;
22         }
23       }
24       ans = std::max(ans, len-l);
25       return ans;
26     }
27 };

需要注意这里的字符不仅仅是英文字母,字符char不多于256个,数组范围设
为256即可。O(n)的扫描字符串,每遇到相同的,比对max。

转载于:https://www.cnblogs.com/jiu0821/p/10880192.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值