c语言 判断一个字符串是否能组成回文
时间: 2023-08-02 12:18:00 浏览: 120
判断一个字符串是否能组成回文,可以使用哈希表来记录每个字符出现的次数。具体实现方法如下:
1. 定义一个哈希表count,用于记录每个字符出现的次数。
2. 遍历字符串s的每个字符,将对应的count值加1。
3. 如果字符串s的长度为偶数,那么每个字符必须出现偶数次才能组成回文;如果字符串s的长度为奇数,那么只有一个字符可以出现奇数次,其它字符必须出现偶数次才能组成回文。
4. 遍历哈希表count的每个元素,如果存在一个元素的值为奇数,且字符串s的长度为偶数,或者存在两个或以上的元素的值为奇数,那么字符串s不能组成回文;否则,字符串s可以组成回文。
具体代码实现如下:
```c
#include <stdio.h>
#include <string.h>
int can_form_palindrome(char s[]) {
int i, len = strlen(s);
int count[26] = {0}; // 初始化计数器
for (i = 0; i < len; i++) {
count[s[i] - 'a']++; // 统计每个字符出现的次数
}
int odd_count = 0; // 记录出现奇数次的字符的个数
for (i = 0; i < 26; i++) {
if (count[i] % 2 == 1) {
odd_count++;
if (len % 2 == 0 || odd_count > 1) return 0; // 不能组成回文
}
}
return 1; // 可以组成回文
}
int main() {
char s[1001];
scanf("%s", s);
if (can_form_palindrome(s)) printf("YES\n");
else printf("NO\n");
return 0;
}
```
上述代码中,我们使用了一个长度为26的数组count来记录每个小写字母出现的次数。由于数组下标从0开始,因此需要将字符减去字符'a'的ASCII码值,才能得到正确的下标。如果出现奇数次的字符的个数超过了1个,或者字符串长度为偶数且存在出现奇数次的字符,那么字符串不能组成回文。如果没有上述情况,那么字符串可以组成回文。
阅读全文