Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

209
Views
How to create an anagram genrator using JS with recursion

So I've been trying to create a function that prints out all the possible anagram for a given string , input:abc output:abc,acb,bac,bca,cab,cba But I can't complete it so the probleme is I can't insert the first letter in a specified index in a string any solution?

function anagram(str) {
  if (str.length === 1) return str[0];
  let collection = [];
  let subStr = str.slice(1, str.length);
  let subStrAnagram = anagram(subStr);
  for (let i = 0; i < subStrAnagram.length; i++) {
    for (let j = 0; j < subStrAnagram[i].length; j++) {
      let copy = new String(subStrAnagram[i]);
      
    }
  }
  return collection;
}
console.log(anagram("avc"));
about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

How about this:

function anagram(str) {
  // Edge cases
  if (str.length == 0) return [];
  if (str.length == 1) return [str];

  let collection = [];
  anagramRecursive(str, "", collection);
  return collection;
}

function anagramRecursive(str, prev, collection) {
  if (str.length == 0) {
    collection.push(prev);
    return;
  }

  let alreadyUsed = [];

  for (let i = 0; i < str.length; i++) {
    // If the character at str[i] has already been used at this level,
    // skip it to avoid generating duplicate solutions
    if (alreadyUsed.includes(str[i])) {
      continue;
    }
    alreadyUsed.push(str[i]);

    const current = prev + str[i];
    const newStr = str.slice(0, i) + str.slice(i + 1);
    anagramRecursive(newStr, current, collection);
  }
}

Updated to include a check that prevents duplicate solutions from being generated.

about 4 years ago · Santiago Trujillo Report

0

The below solution assumes the anagram is a single word with no spaces.

Code explanation are inline.

function anagram(original, str, collections) {  
    let splitted = str.split(''); // convert the string to array. Why? Its easy to handle
    for(let i =0; i < (splitted.length - 1); i++){ // Run a for loop till last but 1 character.
      const char = splitted[i]; // copy the character at that index
      splitted.splice(i, 1, str[i+1]); // shift the immediate next character to index
      splitted.splice(i+1, 1,char); // insert the copied character to the position of the next
      const joined = splitted.join(''); // join the splitted
      if(collections.indexOf(joined) === -1){ // confirm the string is not previously formed
        collections.push(joined)      // put it inside the collection
      }
    }
    const lastCollection =  collections[collections.length-1]; // take the last collection
    if(lastCollection !== original){ // compare it with the original, if not matches, call anagram function again
     return anagram(original, lastCollection, collections); 
    }
    
    return collections; // else return the collections
}
console.log(anagram("abc", "abc", []));

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!