首页 > 代码库 > 判断一个字符串通过变化字符的位置,是否可以组成回文

判断一个字符串通过变化字符的位置,是否可以组成回文

解法就是判断下字符串中是否有某些字符是奇数个,如果这种字符的个数大于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;}
代码