/*
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
来源:力扣(LeetCode)
*/
/*
说明:
1、如果满足条件,字符串总数是偶数个,则所有字符必然是偶数倍数;
2、字符串总数是奇数个,则只能有一个字符的总个数为奇数,放在最中间;
3、因此统计所有字符的个数以及奇数字符的个数即可;
*/
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool canPermutePalindrome(char* s){
int i;
int len = 0;
char buf[128] = {0};
int odd = 0;
len = strlen(s);
for (i = 0; i < len; i++) {
buf[s[i]] += 1;
if (buf[s[i]] % 2 != 0) {
odd++;
}else{
odd--;
}
}
if ((len % 2 == 0 && odd == 0) ||
(len % 2 != 0 && odd == 1) )
{
return true;
}
return false;
}
int main(){
char str[128] = {0};
while(1) {
memset(str, 0, sizeof(str));
printf("input:");
fgets (str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0';
printf("result:%d\r\n", canPermutePalindrome(str));
}
return 0;
}
回文排列
最新推荐文章于 2022-10-12 23:45:58 发布