Как я могу проверить, можно ли получить одну строку из другой, поменяв местами два символа? - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы написать функцию, которая принимает слова 1 и 2, длина обоих слов равна. Моя цель - проверить, можно ли из слова word1 создать слово word2, меняя местами два разных символа. Только один своп включен. И если это возможно, то, что эти два персонажа.

Например:

word1: sale,
word2: lase,
function should return 'swap s l'

word1: and,
word2: dna,
function should return 'swap a d'

Я понятия не имею, как запустить эту задачу. (Случаи, подобные отсутствию слова, слова имеют разную длину и т. Д. c ... обрабатываются). Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Как @ sp c объяснил:

function areEqualIfSwapped(A, B) {
     if(!A || !B || A.length != B.length)
          return 'error';
     var chars = A.split('');
     for(var i = 0; i < chars.length-1; i++){
          for(var j = i+1; j < chars.length; j++){
               var current = [].concat(chars);
               var temp = current[i];
               current[i] = current[j];
               current[j] = temp;
               var str = current.join("");
               if(str == B)
                    return 'swap '+current[i]+' and '+current[j];
           }
      }
      return 'error';
 }
 console.log(areEqualIfSwapped('and','dna'));
 console.log(areEqualIfSwapped('sale','lase'));
 console.log(areEqualIfSwapped('baba','bbaa'));
1 голос
/ 02 апреля 2020

Решение

Вы можете начать с использования вложенных циклов for.

  1. Первый l oop начнется с outerIndex = 0, следующий начнется с innerIndex = outerIndex + 1.
  2. Внешний l oop будет работать до word1.length - 1
  3. поменяйте местами символы word1 в каждом индексе и проверьте с помощью word2
  4. Вы можете легко сохранить оба символа в переменных
  5. , если найдете совпадение, вырвитесь из l oop
  6. Готово!
...