Salve a tutti

Ho un problema con un esercizio in C. In breve, devo creare una funzione con prototipo int strperiod(char *str) che ritorna la lunghezza del più breve periodo della stringa. Una stringa ha periodo k se è uguale alla concatenazione di una o più ripetizioni di una stringa di lunghezza k. Ad esempio, la stringa "ciaociao" ha periodo 4 ed anche 8 ma la funzione restituisce 4 perché è il periodo più breve; la stringa "01010101" ha periodo 2, 4 e 8 ma la funzione ritorna soltanto 2 per lo stesso motivo. In generale, una stringa ha periodo almeno pari alla sua lunghezza: ad esempio, la stringa "periodo" ha periodo 7 perché non esiste una sottostringa che si ripete almeno una volta.

Spero di avervi fornito una spiegazione sufficientemente chiara.

Ora, devo implementare questa funzione con l'aritmetica dei puntatori e allora ho pensato a questa soluzione che però non funziona. Per favore, qualcuno mi dia una mano...

codice:
int strperiod(char *str) {
    
    int offset = 0;
    int period = 0;
    
    while (*str != *(++str) && *str != '\0') {
        offset++;
    }
    
    char *j = str + offset;
    
    while (*str != '\0') {
        if (*str == *j)
            period++;
        str++;
    }
    
    return period;
}