zoukankan      html  css  js  c++  java
  • [笔记]一道C语言面试题:判断字串是否可以通过重新排列字母使之对称

    题目:输入一个字符串,如“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
      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语言,面试题
  • 相关阅读:
    [转帖]一些理念,一份感动,一段友谊。或许在短暂的一生中就弥足珍贵了。
    浏览器屏蔽双击选中文字
    RBAC: 基于角色的访问控制(Role-Based Access Control)
    关于ehcache配置中timeToLiveSeconds和timeToIdleSeconds的区别
    拓展jQuery的方法
    用HashSet存储不重复的对象
    spring task 实现定时执行(补充:解决定时任务执行2次问题)
    CronExpression
    java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
    jquery的原理机制
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/2169291.html
Copyright © 2011-2022 走看看