查找最長不重複的子字符串 (C語言版)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    const char* str = "abdafgkfbcdakpy";

    int hash[256] = { 0 };
    const char* maxStr = str;
    int maxNum = 0;

    const char* start = str;
    const char* p;
    for (p = str; *p != '\0'; p++)
    {
        if (hash[*p] == 0)
        {
            hash[*p] = 1;
        }
        else
        {
            if (p - start > maxNum)
            {
                maxNum = p - start;
                maxStr = start;
            }

            while (*start != *p)
            {
                hash[*start] = 0;
                start++;
            }
            start++;
        }        
    }

    if (p - start > maxNum)
    {
        maxNum = p - start;
        maxStr = start;
    }

    char* target = (char*)malloc(maxNum + 1);
    memcpy(target, maxStr, maxNum);
    target[maxNum] = '\0';

    printf("The target str is %s", target);   
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章