Created
April 17, 2012 02:28
-
-
Save bxshi/2403009 to your computer and use it in GitHub Desktop.
CareerCup 150 1.4 @1point3acres
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* CareerCup 150 4/16-4/22 1.4 | |
* | |
* slaink@1point3acres | |
* | |
*/ | |
/* | |
* 两个字符串是回文的话,应该是类似abcde edcba 这样子吧? | |
* 如果真的如此,那么直接从字符串a开头开始于字符串b结尾开始比较,如果遇到不相同则输出 | |
* 另外,既然是回文,那么长度应该也相同吧 | |
* updated: 果然没有这么简单,改用计数器吧(Qsort写了好几道题了,先缓缓不用了……) | |
*/ | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
int check_anagrams(char *string1, char * string2); | |
int check_real_anagrams(char *string1, char *string2); | |
int main(int argc, char **argv) | |
{ | |
if(argc != 3){ | |
printf("usage: <program name> <string 1> <string 2>\n"); | |
return 0; | |
} | |
if(check_real_anagrams(argv[1], argv[2])) | |
printf("not anagram\n"); | |
return 0; | |
} | |
int check_anagrams(char *string1, char *string2) | |
{ | |
size_t i, j; | |
size_t str1_len, str2_len; | |
str1_len = strlen(string1); | |
str2_len = strlen(string2); | |
if(str1_len != str2_len) | |
return 1; | |
i = 0; | |
j = str2_len -1; | |
while(i<str1_len) | |
if(string1[i++] != string2[j--]) | |
return 1; | |
return 0; | |
} | |
int check_real_anagrams(char *string1, char *string2) | |
{ | |
int *bitmap1, *bitmap2; | |
int i; | |
int str1_len; | |
str1_len = strlen(string1); | |
if(str1_len != strlen(string2)) | |
return 1; | |
bitmap1 = calloc(256, sizeof(int)); | |
bitmap2 = calloc(256, sizeof(int)); | |
memset(bitmap, 0, *bitmap); | |
for(i=0;i<str1_len;i++) { | |
bitmap1[(int)string1[i]]++; | |
bitmap2[(int)string1[j]]++; | |
} | |
for(i=0;i<256;i++) | |
if(bitmap1[i]!=bitmp2[i]) | |
return 1; | |
free(bitmap1); | |
free(bitmap2); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment