Mark As Completed Discussion

Navigating the Loop: Advanced Tips

This approach beautifully sidesteps non-alphabetical characters. But let's talk about the "how" for a moment. To ensure accuracy, remember to iterate the reversedAlpha array independently from the loop that scans the original string.

Optional: Simplifying with .shift()

If the thought of juggling another pointer or index leaves you dizzy, here's a simpler alternative: use the .shift() method. This function efficiently grabs the left-most element in an array, essentially doing the pointer's job for you. Imagine it as having a helper who hands you each reversed "gold coin" as you walk along your original path.

Method 2: The Two-Pointer Skip Technique

Method 2

Dual Pointers with a Twist

The second approach also involves using two pointers, much like our first method. However, this one comes with a twist: it skips over the non-alphabetical characters directly.

How to Skip Efficiently

Just like in a dance, when a couple realizes they are out of sync, they adjust their steps. Similarly, if either of the pointers encounters a non-alphabetical character, it simply "dances" past it, without making a swap.

By adopting this approach, you get to keep the original sequence of non-alphabetical characters intact while reversing only the alphabets. Think of it as flipping some tiles on a mosaic floor without disturbing the overall pattern.

1function isAlpha(c) {
2  return (c >= 65 && c <= 90) || (c >= 97 && c <= 122);
3}
4
5function swap(arr, a, b) {
6  let t = arr[a];
7  arr[a] = arr[b];
8  arr[b] = t;
9}
10
11function reverseOnlyAlphabetical(str) {
12  const result = str.split("");
13  let left = 0;
14  let right = result.length - 1;
15
16  while (left < right) {
17    if (!isAlpha(result[left].charCodeAt())) {
18      left++;
19    } else if (!isAlpha(result[right].charCodeAt())) {
20      right--;
21    } else {
22      swap(result, left++, right--);
23    }
24  }
25
26  return result.join("");
27}
28
29console.log(reverseOnlyAlphabetical("sea!$hells3"));