每日力扣算法题(简单篇)

409.最长回文串

原题:

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。

在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。

解题思路:

这题字符串中只有大写和小写字母,元素有限,所以可以用哈希表,再看回文子串,回文子串的特征有两个,分为奇数长度和偶数长度,那么我们先数一数字符串的每一个字母都有多少个,然后开始取字符串,先把偶数个的字母取出来,同时取出多余两个的但不是偶数个的,留一个取出来。取完后,如果还有剩下的再随便取一个就一定是最长的回文子串长度。

都看到这里点个赞吧,可以的话点个关注吧

源代码:

int longestPalindrome(char * s){

    int hash[52];

    memset(hash,0,sizeof(hash));

    for(int i=0;i

    {

        if(s[i]>=65&&s[i]<=90)

        {

            hash[s[i]-65]++;

        }else

        {

            hash[s[i]-71]++;

        }

    }

    int ans=0;

    for(int i=0;i<52;i++)

    {

        if(hash[i]>=2&&hash[i]%2==0)

        {

            ans+=hash[i];

            hash[i]=0;

            continue;

        }

        if(hash[i]>=2&&hash[i]%2!=0)

        {

            ans+=hash[i]-1;

            hash[i]=1;

        }

    }

    for(int i=0;i<52;i++)

    {

        if(hash[i]==1)

        {

            ans++;

            break;

        }

    }

    return ans;

}

你可能感兴趣的:(力扣简单篇,算法,leetcode,职场和发展)