Algorithms: No Repeats Please
This commit is contained in:
		
							parent
							
								
									ecad95a4e8
								
							
						
					
					
						commit
						96a5e6bff1
					
				
							
								
								
									
										37
									
								
								Algorithms/noRepeatsPlease.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Algorithms/noRepeatsPlease.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
// https://www.freecodecamp.org/learn/coding-interview-prep/algorithms/no-repeats-please
 | 
			
		||||
 | 
			
		||||
function permAlone(str) {
 | 
			
		||||
  let noRepeatsCount = 0;
 | 
			
		||||
  noRepeatsCount += Number(!/(.{1})\1/.test(str));
 | 
			
		||||
 | 
			
		||||
  function swap(Arr, iA, iB) {
 | 
			
		||||
    const tmp = Arr[iA];
 | 
			
		||||
    Arr[iA] = Arr[iB];
 | 
			
		||||
    Arr[iB] = tmp;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const strArr = str.split("");
 | 
			
		||||
  const strLength = strArr.length;
 | 
			
		||||
  // Heap's Algorithm as explained @ https://www.baeldung.com/cs/array-generate-all-permutations
 | 
			
		||||
  const c = Array(strLength).fill(0);
 | 
			
		||||
  let i = 0;
 | 
			
		||||
  while (i < strLength) {
 | 
			
		||||
    if (c[i] < i) {
 | 
			
		||||
      if (i % 2) {
 | 
			
		||||
        swap(strArr, c[i], i);
 | 
			
		||||
      } else {
 | 
			
		||||
        swap(strArr, 0, i);
 | 
			
		||||
      }
 | 
			
		||||
      noRepeatsCount += Number(!/(.{1})\1/.test(strArr.join("")));
 | 
			
		||||
      c[i]++;
 | 
			
		||||
      i = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
      c[i] = 0;
 | 
			
		||||
      i++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return noRepeatsCount;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
console.log(permAlone("abcdefa"));
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user