Find the total number of anagrams that a string contains of a substring
This commit is contained in:
parent
25b5b9090c
commit
91e97fb8b4
|
@ -0,0 +1,62 @@
|
|||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int compare(const void *lhs, const void *rhs) {
|
||||
const char *left = lhs;
|
||||
const char *right = rhs;
|
||||
return *left > *right;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if(argc != 3) {
|
||||
fprintf(stderr, "usage: %s <needle> <haystack>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *needle = argv[1];
|
||||
size_t needle_len = strlen(needle);
|
||||
char *deeeln = malloc(needle_len);
|
||||
|
||||
if(!deeeln) {
|
||||
fprintf(stderr, "malloc: %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
strncpy(deeeln, needle, needle_len);
|
||||
qsort(deeeln, needle_len, 1, compare);
|
||||
|
||||
char *haystack = argv[2];
|
||||
size_t haystack_len = strlen(haystack);
|
||||
char *aachksty = malloc(haystack_len);
|
||||
|
||||
if(!aachksty) {
|
||||
fprintf(stderr, "malloc: %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t pos = 0;
|
||||
char *idx = haystack;
|
||||
unsigned int anagrams = 0;
|
||||
|
||||
for(; pos + needle_len <= haystack_len; pos += 1, idx += 1) {
|
||||
strncpy(aachksty, idx, needle_len);
|
||||
qsort(aachksty, needle_len, 1, compare);
|
||||
|
||||
if(strncmp(deeeln, aachksty, needle_len) == 0) {
|
||||
anagrams += 1;
|
||||
}
|
||||
}
|
||||
|
||||
free(deeeln);
|
||||
free(aachksty);
|
||||
printf("%u anagram", anagrams);
|
||||
|
||||
if(anagrams != 1) {
|
||||
printf("s");
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue