【leetcode】字符的最短距离

int* shortestToChar(char * S, char C, int* returnSize){
    int strLength = strlen(S);//字符串长度
    int *arr=(int*)malloc(sizeof(int)*strLength);
    int prev = -strLength;
    int i;
    for(i=0;i<strLength;i++){
        if(S[i] == C) prev = i;
        arr[i] =  i-prev;
    }
    for(i = prev-1;i>=0;i--){
        if(S[i] == C) prev = i;
        if(arr[i] > prev-i) arr[i] =  prev-i;
    }
    *returnSize = strLength;
    return arr;
}
int MinVal(int i,int* Cpst,int pst)
{
    int min = abs(Cpst[0] - i);
    for (int j=1; j<pst; j++)
    {
        if (abs(Cpst[j] - i) < min) min = abs(Cpst[j] - i);
        if (!min) return 0;
    }
    return min;
}
int* shortestToChar(char * S, char C, int* returnSize){
    int* Cpst = (int*)calloc(strlen(S),sizeof(int));
    int* arr = (int*)calloc(strlen(S),sizeof(int));
    int pst = 0;
    int i;
    for (i=0; i<strlen(S); i++)
    {
        if (S[i] == C) Cpst[pst++] = i;
    }
    for (i=0; i<strlen(S); i++)
    {
        arr[i] = MinVal(i,Cpst,pst);
    }
    *returnSize = strlen(S);
    return arr;
}
原文地址:https://www.cnblogs.com/ganxiang/p/13620742.html