Skip to content

Instantly share code, notes, and snippets.

@bxshi
Created April 17, 2012 02:28
Show Gist options
  • Save bxshi/2403009 to your computer and use it in GitHub Desktop.
Save bxshi/2403009 to your computer and use it in GitHub Desktop.
CareerCup 150 1.4 @1point3acres
/*
* 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