题目描述
给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。
示例 1:
输入: "code"
输出: false
示例 2:
输入: "aab"
输出: true
示例 3:
输入: "carerac"
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
白话题目:
一串字符串,可能所有的ascii啊,不只26个,求能不能组合成回文串,因为说可以随便组合,就看呗。
算法:
数量满足就好其实。
(1)模拟hash计数
(2)统计奇数个出现的字符数量是否大于1
详细解释关注 B站 【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB
C语言完全代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool canPermutePalindrome(char * s)
{
int cnt[128] = {0}; // 总共有128个ASCII码 ...
int i=0;
int n;
for (i = 0, n = strlen(s); i < n; i++)
cnt[s[i]]++;
//统计这个数组中奇数个的字母不能超1个
int ans = 0;
for (i = 0; i < 128; i++)
ans += (cnt[i] % 2); //模2 判断奇数偶数, ans求和计数
return ans<=1?1:0;
}
int main()
{
printf("输入字符串s\n");
char *s;
s=(char *)malloc(sizeof(char));
gets(s);
printf("%s\n",s);
int result =canPermutePalindrome(s);
printf("%d\n",result);
return 0;
}