Почему происходит выход за границы массива?
Потому что вы обращаетесь к элементу с индексом j = j + 2
Когда j равен количеству элементов минус один, тогда и происходит выход за пределы массива.

Ну или на последней строчке, где вы делаете то же самое, но + 1.
В массиве key лежат индексы выходящие за пределы массива letters, а точнее при j=0 в данной строке обращаетесь к keys[1] со значением 5, когда как в letters максимум 4.