How to merge two strings based on shared suffix and prefix in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* merge_on_overlap(const char* a, const char* b) {
    size_t len_a = strlen(a);
    size_t len_b = strlen(b);

    size_t max_possible_overlap_len = len_a < len_b ? len_a : len_b;  

    size_t overlap = 0;

    // Try longest overlap first
    for (size_t len = max_possible_overlap_len; len > 0; len--) {
        if (strncmp(a + (len_a - len), b, len) == 0) {
            overlap = len;
            break;
        }
    }

    // Allocate result: a + (b minus overlap) + null terminator
    size_t result_len = len_a + (len_b - overlap);
    char* result = malloc(result_len + 1);
    if (!result) return NULL;

    memcpy(result, a, len_a);
    memcpy(result + len_a, b + overlap, len_b - overlap);
    result[result_len] = '\0';

    return result;
}

int main(void) {
    const char* a = "fantasy time travel technology";
    const char* b = "technology extraterrestrial life";

    char* merged = merge_on_overlap(a, b);
    if (merged) {
        printf("%s\n", merged);
        free(merged);
    }
}



/*
run:

fantasy time travel technology extraterrestrial life

*/

 



answered Jan 23 by avibootz
...