leetcode 003 —— Longest Substring Without Repeating Characters

来源:互联网 发布:淘宝直邮有假货吗 编辑:程序博客网 时间:2024/04/30 07:06

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.


方法:贪心算法

     假设子串里含有重复字符,则父串一定含有重复字符,单个子问题就可以决定父问题,因此可以用贪心法。跟动规不同,动规里,单个子问题只能影响父问题,不足以决定父问题。从左往右扫描,当遇到重复字母时,以上一个重复字母的index+1,作为新的搜索起始位置,直到最后一个字母,复杂度是O(n)。


class Solution {public:    int lengthOfLongestSubstring(string s) {        const int letter_kinds=256;             //覆盖所有字母的ASCII值        int last[letter_kinds];        fill(last,last+letter_kinds-1,-1);      //last数组全部赋值 -1   fill函数的作用是:将一个区间的元素都赋予val值。头文件 algorithm        int start_pos=-1;        int max_len=0;        for(int i=0;i<s.size();i++){                    if(last[s[i]]>start_pos){           //如果s[i]上次出现的位置,大于起始位置,即表示这个字母,在子串已经出现过了。                    start_pos=last[s[i]];            }            max_len=max(i-start_pos,max_len);   //包含头文件 cmath            last[s[i]]=i;                       //给所有出现过的字母赋值为当前位置        }        return max_len;    }};


0 0
原创粉丝点击