[노트] C 언어 면접문제: 문자열이 자모를 다시 배열해서 대칭이 될 수 있는지 판단

2041 단어 C 언어
제목: "adcaeceed"와 같은 문자열을 입력하여 대칭 문자열을 다시 배열해서 출력할 수 있는지 판단합니다. 예를 들어 "adceeecda"를 출력하고 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
", s1, CheckIfCanBeSymmetric(s1)); printf("%s is %d
", s2, CheckIfCanBeSymmetric(s2)); printf("%s is %d
", s3, CheckIfCanBeSymmetric(s3)); printf("%s is %d
", s4, CheckIfCanBeSymmetric(s4)); } //------------------------------------------------------------------------- int main(int argc, char *argv[]) { TestCheckIfCanBeSymmetric(); getchar(); return 0; }

Technorati 태그:
C 언어 ,
면접 문제

좋은 웹페이지 즐겨찾기