解法就是判断下字符串中是否有某些字符是奇数个,如果这种字符的个数大于1,说明无法组成回文;小于或等于1可以组成回文。
其中用了strlen(),放到for循环里面容易导致程序运行效率下降,比如输入的字符串很大 10^5个字符时
for(int i=0; i<strlen(string); i++)会导致程序运行很慢。改用:
int length = strlen(string); for(int i=0; i<length; i++) 可以很大程度提升效率。
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> void findPalind(char *arr) { int flag = 0; // Find the required answer here. Print Yes or No at the end of this function depending on your inspection of the string int result[26]; for (int i=0; i<26; i++) { result[i] = 0; } int lenth = (int)strlen(arr); for (int i=0; i<lenth; i++) { int index = (int)*(arr + i) - (int)‘a‘; if (result[index] == 0) { result[index] = 1; } else { result[index] = 0; } } int sum = 0; for (int i=0; i<26; i++) { sum += result[i]; } if (sum >= 2) { flag = 1; } else { flag = 0; } if (flag==0) printf("YES\n"); else printf("NO\n"); return; } int main() { char arr[100001]; scanf("%s",arr); findPalind(arr); return 0; }
判断一个字符串通过变化字符的位置,是否可以组成回文,布布扣,bubuko.com
原文:http://www.cnblogs.com/huangzizhu/p/3918801.html