למיטב הבנתי את השאלה, אתה צריך לטפל גם במקרה כזה:
ab$abe$ab$ab$adsg
כלומר יש מחרוזת סימטרית... פשוט לא עם ה$ ה-1.
כמוכן אין סיבה ממשית לרוץ על כל המחרזות של 100 תווים (למשל) אם מצאנו
את השרשרת ב10 הראשונים...
הנה מימוש שלי:
PHP קוד:
#include <stdio.h>
#include <stdlib.h>
int sim(char **st, int len) {
int ok = 0, i = 0, fst = 0, next = 0;
while (!ok && i < len) {
//printf("%c\n", (*st)[i]);
if ((*st)[i] == '$')
if (!fst) fst = i;
else {
next = (i - fst)+i;
if (next < len) {
if ((*st)[next] == '$') ok = 1;
}
else fst = i;
}
i++;
}
return ok;
}
int main() {
char* st;
int st_size = 0;
printf("Enter ST size: ");
scanf("%d", &st_size);
st = (char *) malloc(sizeof(char) * st_size);
printf("Enter ST(%d): ", st_size);
scanf("%s", st);
printf("Result of SIM: %d\n", sim(&st, st_size));
return 0;
}
הקוד רץ על GCC, כמובן טל"ח.
פלט:
קוד:
yury@moon ~ $ gcc sim.c -o sim
yury@moon ~ $ ./sim
Enter ST size: 20
Enter ST(20): abcd$dg$asdg$adgd$dsgsg
Result of SIM: 1
yury@moon ~ $