JavaScript Program to Reverse Consonants in a Given String Without Affecting the Other Elements

In this article, we have given a string and the task is to write a javascript program to reverse only the consonants of a string without affecting the other elements’ positions and printing the output in the console.

Examples:

Input: hello
Output: lelho
Explanation: h,l,l are consonants in the given string.
After modifying the string their occurrences are l,l,h and
vowels positions are not changed.

These are the following approaches by using these we can solve the given question:

Using loop:

In this approach, we reverse the consonants in a given string. It initializes pointers at the start and end of the string, identifies consonants using a set, and swaps them until the pointers meet. If a character is not a consonant, the corresponding pointer is incremented or decremented accordingly. The code converts the array of characters back to a string and returns the modified string.

Example: This example shows the use of the above-explained approach.

Javascript
// Function to reverse the 
// consonants of the given string
function reverseConsonants(s) {
    // Convert string to array of characters
    let sArray = s.split('');

    // Initialize pointers
    let left = 0;
    let right = s.length - 1;

    // Define set of consonants
    let consonants = new Set(['b', 'c', 'd', 'f', 'g',
        'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's',
        't', 'v', 'w', 'x', 'y', 'z']);

    // While pointers don't meet
    while (left < right) {
        if (consonants.has(sArray[left].toLowerCase())
            && consonants.has(sArray[right].toLowerCase())) {
            // Swap consonants
            let temp = sArray[left];
            sArray[left] = sArray[right];
            sArray[right] = temp;
            left++;
            right--;
        } else if (!consonants.has(sArray[left].toLowerCase())) {
            left++;
        } else if (!consonants.has(sArray[right].toLowerCase())) {
            right--;
        }
    }

    // Convert array back to string and return
    return sArray.join('');
}

// Driver Code
let s = 'geek';
console.log(reverseConsonants(s));

Output
keeg

Using reverse() method:

In this approach, the function generates a consonant list from the input string using array operations. It reverses this list, initializes an empty string, and iterates through the input, replacing consonants with reversed ones. It utilizes the ‘match()‘ method for character checks, array methods like ‘filter()‘ and ‘reverse()‘, and string concatenation to build the modified string, which is then returned.

Example: This example shows the use of the above-explained approach.

Javascript
function reverseConsonants(inputString) {

    // Generate a list of consonants 
    // from the input string
    let consonants = Array.from(inputString).
        filter(char => 
            char.match(/[a-zA-Z]/) && !'aeiouAEIOU'.includes(char));

    // Reverse the list of consonants
    consonants.reverse();

    // Initialize a string variable
    // to store the modified string
    let outputString = '';

    // Iterate through the input string and replace
    // consonants with reversed consonants
    for (let char of inputString) {
        if (char.match(/[a-zA-Z]/) && !'aeiouAEIOU'.includes(char)) {
            outputString += consonants.shift();
        } else {
            outputString += char;
        }
    }

    // Return the modified string
    return outputString;
}

let inputString = "geek";
console.log(reverseConsonants(inputString));

Output
keeg

Using Two-Pointer Technique

Using the two-pointer technique to reverse consonants involves placing pointers at the beginning and end of the string, swapping consonants when both pointers are at consonants, and moving pointers inward. This continues until the pointers cross, ensuring non-consonants remain unaffected.

Example: In this example The function reverseConsonants reverses consonants in a string using a two-pointer technique, leaving other characters unchanged. It correctly reverses consonants while preserving the string’s structure.

JavaScript
function reverseConsonants(str) {
  const isConsonant = (char) => /[bcdfghjklmnpqrstvwxyz]/i.test(char);
  
  let arr = str.split('');
  let left = 0;
  let right = arr.length - 1;
  
  while (left < right) {
    if (!isConsonant(arr[left])) {
      left++;
    } else if (!isConsonant(arr[right])) {
      right--;
    } else {
      [arr[left], arr[right]] = [arr[right], arr[left]];
      left++;
      right--;
    }
  }
  
  return arr.join('');
}

console.log(reverseConsonants("Hello, World!")); // "Hollo, Werld!"

Output
delro, WollH!

Using Regular Expressions and Array Manipulation:

This approach utilizes regular expressions to match consonants and then employs array manipulation techniques to reverse only the consonants while keeping the vowels and other characters in their original positions.

Example:

This approach provides another way to achieve the desired outcome by leveraging regular expressions and array manipulation techniques.

JavaScript
function reverseConsonantsWithRegex(str) {
    // Define regular expression to match consonants
    const consonantRegex = /[bcdfghjklmnpqrstvwxyz]/i;
  
    // Convert the string to an array of characters
    let arr = str.split('');
  
    // Initialize pointers
    let left = 0;
    let right = arr.length - 1;
  
    // Iterate through the array of characters
    while (left < right) {
        // Check if the character at the left pointer is a consonant
        if (consonantRegex.test(arr[left])) {
            // Check if the character at the right pointer is a consonant
            if (consonantRegex.test(arr[right])) {
                // Swap consonants
                [arr[left], arr[right]] = [arr[right], arr[left]];
                left++;
                right--;
            } else {
                // Move the right pointer if the character at the right is not a consonant
                right--;
            }
        } else {
            // Move the left pointer if the character at the left is not a consonant
            left++;
        }
    }
  
    // Convert the array back to a string and return
    return arr.join('');
}

// Test the function
console.log(reverseConsonantsWithRegex("Hello, World!")); // "Hollo, Werld!"

Output
delro, WollH!





Contact Us