Find longest substring without repeating characters

前端 未结 30 2456
轻奢々
轻奢々 2020-12-12 18:07

Given a string S of length N find longest substring without repeating characters.

Example:

Input:

30条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-12 18:59

    The solution in C.

    #include
    #include 
    
    void longstr(char* a, int *start, int *last)
    {
        *start = *last = 0;
        int visited[256];
        for (int i = 0; i < 256; i++)
        {
            visited[i] = -1;
        }
        int max_len = 0;
        int cur_len = 0;
        int prev_index;
        visited[a[0]] = 0;
        for (int i = 1; i < strlen(a); i++)
        {
            prev_index = visited[a[i]];
            if (prev_index == -1 || i - cur_len > prev_index)
            {
                cur_len++;
                *last = i;
            }
            else
            {
                if (max_len < cur_len)
                {
                    *start = *last - cur_len;
                    max_len = cur_len;
                }
                cur_len = i - prev_index;
            }
            visited[a[i]] = i;
        }
        if (max_len < cur_len)
        {
            *start = *last - cur_len;
            max_len = cur_len;
        }
    }
    
    int main()
    {
        char str[] = "ABDEFGABEF";
        printf("The input string is %s \n", str);
        int start, last;
        longstr(str, &start, &last);
        //printf("\n %d  %d \n", start, last);
        memmove(str, (str + start), last - start);
        str[last] = '\0';
        printf("the longest non-repeating character substring is %s", str);
        return 0;
    }
    

提交回复
热议问题