题目:输入一个字符串,如“adcaeceeed”,判断是否可以通过重新排列使之可以输出对称字符串,如本例可以输出“adceeeecda”,返回True。

来源:某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
  ;
  ;
  ] = {};     // 对ASCII码每个字符对应一个计数器

  if (str == NULL) return false;
  ) return true;

  // 扫描字串,对每个字符对应的计数器++
  ; i < strlen(str); i++)
    CountList[str[i]]++;

  // 检查计数器列表,如果有超过1个奇数,则返回 False
  , n = ; i < ; i++) {
     == ) n++;

    ) 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();
  ;
}

一道C语言面试题:判断字串是否可以通过重新排列字母使之对称的更多相关文章

  1. python3中判断字串类型

    s为字串 s.isalnum() #所有字符都是数字或者字母,为真返回 Ture,否则返回 False. s.isalpha() #所有字符都是字母,为真返回 Ture,否则返回 False. s.i ...

  2. [笔记]一道C语言面试题:大整数乘法

    题目:输入两个数字字符串,如“1234567890”和“987654321”,返回二者相乘的结果字符串,如本例返回为“1219326311126352690”. 来源:某500强企业面试题目 思路:从 ...

  3. C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()

    //自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...

  4. [笔记]一道C语言面试题:IPv4字符串转为UInt整数

    题目:输入一个IPv4字符串,如“1.2.3.4”,输出对应的无符号整数,如本例输出为 0x01020304. 来源:某500强企业面试题目 思路:从尾部扫描到头部,一旦发现无法转换,立即返回,减少无 ...

  5. JS 判断字串字节数,并截取长度

    var matchWords;         function notifyTextLength() {             var inputNum = document.getElement ...

  6. 一道C语言面试题:得到整数的M进制表示字符串

    题目:输入整数n和M,输出n在M进制下的表示字符串.如n=3000,M=16,输出16进制下3000的表示字符串,为“BB8” 来源:某500强企业面试题目 思路:对n取模M,将得到的数字压入栈中,再 ...

  7. 一道C语言面试题:写一个宏,将16位的整数转为Big Endian

    题目:输入16位整数x,如0x1234,将其转为Big Endian格式再输出,此例为输出 0x3412 来源:某500强企业面试题目 思路:将x左移8位得到a,将x右移8位得到b,a+b即为所得 / ...

  8. Inno Setup:获取isl中的多国语言字串

    原文 http://zwkufo.blog.163.com/blog/static/25882512010101041626803/?suggestedreading&wumii 用InnoS ...

  9. JS判断字符串变量是否含有某个字串的实现方法

    JS判断字符串变量是否含有某个字串的实现方法 varCts = "bblText"; if(Cts.indexOf("Text") > 0 ){ aler ...

随机推荐

  1. Parallel并行编程

    Parallel并行编程 Parallel并行编程可以让我们使用极致的使用CPU.并行编程与多线程编程不同,多线程编程无论怎样开启线程,也是在同一个CPU上切换时间片.而并行编程则是多CPU核心同时工 ...

  2. mysql在linux上重启

    如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld sta ...

  3. js阻止事件冒泡的方法

    /********************************************js方法*************************************************** ...

  4. 移动端h5页面写法

    1. 页面宽度320, 所有元素尺寸设一半 缺点:不自能适应全屏 2.页面宽度640,元素尺寸正常 <meta charset="utf-8" /> <meta ...

  5. Extjs4 Grid内容已经拿到但是不显示数据

    原先照着Extjs4.0.7官方文档写了一个GridPanel的列子,没有什么问题,今天又自己写了一个,效果如下,内容肯定拿到就是不显示: 经过一段代码排查后,问题出在了自定义Model时将field ...

  6. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  7. Linux读取文件路径问题

    问题是这样的: 首先终端上有当前路径显示,我有个可执行程序代码是这样的: FILE fp  = fopen(filename, "rb"); if(fp == NULL)     ...

  8. 动态绑定ReportViewer控件之经验总结

    以上两篇文章已经很丰富了,但是照做一遍不行,检查了N遍还是不行,就是找不出问题原因,总是提示“尚未为数据源“DataSet1_DataTable1”提供数据源实例.”这主要是说在为ReportView ...

  9. 清除NT Kernel & System占用80端口

    运行'netstat -ano'发现80端口被system占用,进程号'4'转到任务管理器上看pid对应的进程描述是NT kernel & system. 解决方法: 1.1运行'regedi ...

  10. hdu 5491 The Next(暴力枚举)

    Problem Description Let L denote the number of 1s in integer D’s binary representation. Given two in ...