题目:输入一个字符串,如“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. 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

    原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...

  2. HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查

    转自: http://blog.csdn.net/shootyou/article/details/6615051 今天解决了一个HttpClient的异常,汗啊,一个HttpClient使用稍有不慎 ...

  3. Java开发者工具

    From:http://www.csdn.net/article/2015-03-26/2824317 1. Notepad++ Notepad++是用于编辑xml.脚本以及记笔记的最佳工具.这个工具 ...

  4. Canvas API -- JavaScript 标准参考教程(alpha)

    Canvas API -- JavaScript 标准参考教程(alpha) Canvas API

  5. activity之栈管理

    在android中.一个activity组件能够激活还有一个activity组件:本程序activity和其他程序的activity.     若新的被激活的activity组件属于还有一个应用程序, ...

  6. 每日一发linux命令

    很多用虚拟机的同学在向/tmp目录下进行解压的时候,会发现之前挂载的此目录空间不足,导致下一步无法进行(我在vmwaretools解压的时候就遇到了这个problem)…… 实际上,/tmp是可以进行 ...

  7. 关于ASP.NET 中站点地图sitemap 的使用

    在ASP.NET  MVC 如此火热的时期,我竟然不适时宜的谈起ASP.NET ,恐怕会引来一阵嘲笑.最为无趣的是,讲解的竟然还是其中的一个控件.oh~~  my god!my out! ^_^ Si ...

  8. C++中如何split字符串(转)

    #include <iostream> #include <sstream> #include <string> using namespace std; int ...

  9. C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  10. GIS-开发例程、源代码、MapXtreme、Map (转)

    [原创]MapXtreme实用技巧与源码10例 普通图片生成MapInfo格式电子地图的步骤  http://blog.csdn.net/hmbb2008/category/184134.aspx 基 ...