[笔记]一道C语言面试题:判断字串是否可以通过重新排列字母使之对称
2011-09-06 23:10
435 查看
题目:输入一个字符串,如“adcaeceeed”,判断是否可以通过重新排列使之可以输出对称字符串,如本例可以输出“adceeeecda”,返回True。
来源:某500强企业面试题目
思路:扫描字串,对每个字符出现的次数累加,如果次数为奇数的字符个数不超过1个,则返回True,否则返回False
Technorati 标签: C语言,面试题
来源:某500强企业面试题目
思路:扫描字串,对每个字符出现的次数累加,如果次数为奇数的字符个数不超过1个,则返回True,否则返回False
#include "stdio.h" #include "stdlib.h" #include "string.h" //---------------------------------------- // 判断字串是否可以重新排列字母,使之对称 // 如输入"abab",可以得到"abba",则输出 True // 如输入"abc",则输出 False //---------------------------------------- bool CheckIfCanBeSymmetric(char *str) { // 扫描字串,对每个字符出现的次数累加,如果次数为奇数的字符个数不超过1个,则返回True,否则返回False int i = 0; int n = 0; int CountList[256] = {0}; // 对ASCII码每个字符对应一个计数器 if (str == NULL) return false; if (strlen(str) <= 1) return true; // 扫描字串,对每个字符对应的计数器++ for (i = 0; i < strlen(str); i++) CountList[str[i]]++; // 检查计数器列表,如果有超过1个奇数,则返回 False for (i = 0, n = 0; i < 255; i++) { if (CountList[i] % 2 == 1) n++; if (n > 1) return false; } return true; } //------------------------------------------------------------------------- void TestCheckIfCanBeSymmetric(void) { int n; char s1[] = "ab--++++ca@@bc!!!!~~"; char s2[] = "abcbc"; char s3[] = "abbc"; char s4[] = ""; printf("%s is %d\n", s1, CheckIfCanBeSymmetric(s1)); printf("%s is %d\n", s2, CheckIfCanBeSymmetric(s2)); printf("%s is %d\n", s3, CheckIfCanBeSymmetric(s3)); printf("%s is %d\n", s4, CheckIfCanBeSymmetric(s4)); } //------------------------------------------------------------------------- int main(int argc, char *argv[]) { TestCheckIfCanBeSymmetric(); getchar(); return 0; }
Technorati 标签: C语言,面试题
相关文章推荐
- [笔记]一道C语言面试题:判断字串是否可以通过重新排列字母使之对称
- 判断一字符串是否可以另一字符串重新排列而成
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- CA一道面试题,判断一个整型数是否是2的幂
- iOS开发笔记之判断字符串是否为浮点型或整型,是否以字母开头
- 算法面试题之判断整数是否可以被3整除
- C语言isalnum()函数:判断字符是否为英文字母或数字
- 判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20
- 如何判断一个C++对象是否在堆栈上(通过VirtualQuery这个API来获取堆栈的起始地址,然后就可以得到答案了),附许多精彩评论
- 一道面试题引发的对android中context的研究(一)-SharedPreference是否可以将文件保存在SD卡上
- 通过Ping来判断一个远程计算机是否可以到达
- 面试题17:如何判断二叉树是否是对称二叉树?
- Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。
- 一个字符串重新排列后是否可以变成另一个字符串
- [笔记]一道C语言面试题:大整数乘法
- 判断一个给定的字符串通过循环移位是否可以包含另一个字符串
- 算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
- 字符检测函数:C语言isupper()函数---判断字符是否为大写英文字母
- C语言isalnum()函数:判断字符是否为英文字母或数字
- [笔记]一道C语言面试题:得到整数的M进制表示字符串