3. Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.
For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3.
For “bbbbb” the longest substring is “b”, with the length of 1.

本题不仅要适应字母,非字母也要识别。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        const int ALL_LETTER = 256; //ASCII表的256个字符
        int position[ALL_LETTER];   //记录每个字符出现的位置
        int start = 0;              //记录子字符串开始的位置
        int max_len = 0;            //记录最大子字符串的长度
        fill(position, position+ALL_LETTER, -1);

        for(int i = 0; i<s.size(); i++){
           if(position[s[i]] >= start){
               max_len = max(i-start, max_len);
               start = position[s[i]] + 1;
           }
           position[s[i]] = i;
        }
        return max((int)s.size() - start, max_len);
    }
};

fill函数的作用是:将一个区间的元素都赋予val值。
函数参数:fill(first,last,val); //first为容器的首迭代器,last为容器的末迭代器,val为将要替换的值。需要#include <algorithm>

fill_n函数的作用是:给你一个起始点,然后再给你一个数值count和val。把从起始点开始依次赋予count个元素val的值。

max()函数同样需要头文件#include <algorithm>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值