Longest Substring Without Repeating Characters

来源:互联网 发布:html img 属性 js 编辑:程序博客网 时间:2024/06/16 06:12

题目(Longest Substring Without Repeating Characters)-medium


Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

C语言解答

int lengthOfLongestSubstring(char* s) {    int x = 0;    int y = 0;    int longest = 1;    int tmplongest = 1;    int letters[200]={0};//利用一个letters字符数组来标记某个字符是否访问过,时间复杂度低,效率更高。当然这种方法不够严谨,尤其配合空格    //int length = sizeof(s) / sizeof(s[0]);    int length = strlen(s);//正确计算char数组长度的方法    int i = 0;    for(i = 0; i< 200;i++){        letters[i] = 0;    }    letters[s[x]-' '] = 1;//空格是比较小的一个字符,虽然在ASCII码中不是最小的,但是从题目能表示的字符中,可以这样来达到要求。    if(length == 0){        longest = 0;//如果是空字符串,也要将longest置为0    }    while(y<length){        if(letters[s[y+1]-' '] == 0){            y++;            tmplongest++;            if(longest < tmplongest){                longest = tmplongest;            }            letters[s[y]-' '] = 1;        }else{            letters[s[x]-' '] = 0;            x++;            tmplongest--;        }    }    return longest;}

收获

1. char[2] array1 = {'a','b'};和char* array2 = "ab";这两者长度的计算方法是不一样的;
array1的length = sizeof(array1)/sizeof(array1[0]);
array2的length = strlen(array2);

2. 比较难考虑的点:
(1) 如果s为空;
(2) 如何判断某个字符已经被访问过。


0 0
原创粉丝点击