(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字

根据字符出现频率排序

来源:自己LeetCode刷题
usa
(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字_第1张图片

typedef struct CountChar
{
    int count;
    char ch;
}CountChar;
int cmpchar (const void* e1, const void* e2)
{
    return *((char*)e1)-*((char*)e2);
}
int cmpstruct (const void* e1, const void* e2)
{
    return ((CountChar*)e2)->count-((CountChar*)e1)->count;
}
char * frequencySort(char * s)
{
    int sz=strlen(s);
    qsort(s,sz,sizeof(char),cmpchar);
    CountChar arr[sz];
    int k=-1;
    int count=0;
    for (int i=0;i<sz;i++)
    {
        if (i==0 || s[i]!=s[i-1])
        {
            k++;
            arr[k].count=1;
            arr[k].ch=s[i];
        }
        else
        {
            arr[k].count++;
        }
    }
    qsort(arr,k+1,sizeof(arr[0]),cmpstruct);
    char* ans=(char*)malloc(sizeof(char)*(sz+1));
    int q=0;
    for (int i=0;i<=k;i++)
    {
        while(arr[i].count--)
        {
            ans[q++]=arr[i].ch;
        }
    }
    ans[q++]='\0';
    return ans;
}

最长数对链

来源:自己LeetCode刷题
usa
(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字_第2张图片

int cmp (const void* e1, const void* e2)
{
    return (*((int**)e1))[1]-(*((int**)e2))[1];
}
int findLongestChain(int** pairs, int pairsSize, int* pairsColSize)
{
    qsort(pairs,pairsSize,sizeof(int*),cmp);
    int ans=1;
    int m=0;
    for (int i=1;i<pairsSize;i++)
    {
        if (*(*(pairs+i)+0)>*(*(pairs+m)+1))
        {
            ans++;
            m=i;
        }
    }
    return ans;
}

截断句子

来源:自己LeetCode刷题
usa
(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字_第3张图片

char * truncateSentence(char * s, int k)
{
    int sz=strlen(s);
    int count=0;
    int i=0;
    for (i=0;i<sz;i++)
    {
        if (s[i]==' ')
        {
            count++;
            if (count==k)
            {
                break;
            }
        }
    }
    s[i]='\0';
    return s;
}

反转单词前缀

来源:自己LeetCode刷题
usa
(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字_第4张图片

void reverse(char* arr, int left, int right)
{
    while(left<right)
    {
        char tmp=arr[left];
        arr[left]=arr[right];
        arr[right]=tmp;
        left++;
        right--;
    }
}
char * reversePrefix(char * word, char ch)
{
    int sz=strlen(word);

    for (int i=0;i<sz;i++)
    {
        if (word[i]==ch)
        {
            reverse(word,0,i);
            break;
        }
    }
    return word;
}

字符串中第二大的数字

来源:自己LeetCode刷题
usa
(20230418)根据字符出现频率排序&最长数对链&截断句子&反转单词前缀&字符串中第二大的数字_第5张图片

int secondHighest(char * s)
{
    int max1=-1;
    int max2=-1;
    for (int i=0;s[i];i++)
    {
        if (isdigit(s[i]))
        {
            int num=s[i]-'0';
            if (num>max1)
            {
                max2=max1;
                max1=num;
            }
            else if (num!=max1 && num>max2)
            {
                max2=num;
            }
        }
    }
    return max2;
}

你可能感兴趣的:(超级刷题中心,leetcode)