menumenu_open <!— xhtml.ru —>

Javascript алгоритм: Две строки

Напишем функцию с именем twoStrings, которая будет принимать два аргумента, строки s1 и s2.

Есть две строки, цель функции — определить, есть ли у них общая подстрока. Подстрока может быть всего одним символом. Если в обеих строках есть хотя бы один общий символ, функция возвращает YES. Если обе строки не имеют ничего общего, функция возвращает NO.

Например:

let s1 = "apple";
let s2 = "park";

Жирные символы — общие подстроки a и p. Функция вернёт YES.

Другой пример:

let s1 = "pork";
let s2 = "wait";

Обе строки не имеют ничего общего, поэтому функция вернёт NO.

Пишем код:

let shortStr;
let longStr;

Определяем две переменные, shortStr и longStr. Более длинную строку из аргументов функции присвоим переменной longStr, а более короткую — переменной shortStr. Как узнать, какая строка короче или длиннее другой?

if(s1.length < s2.length){
    shortStr = s1;
    longStr = s2;
} else { 
    shortStr = s2;
    longStr = s1;
}

В операторе if проверяем, если s1 короче, чем s2, то s1 присваиваем переменной shortStr, а s2 достаётся переменной longStr. Если нет, то — наоборот. Если обе строки имеют одинаковую длину, по умолчанию используется присваивание в блоке else.

Это нужно для того, чтобы пробежать по самой короткой строке и посмотреть, существует ли какой-нибудь её символ в переменной longStr. Сэкономим на количество итераций цикла. Это только один из способов, не обязательно самый эффективный.

for(let i = 0; i < shortStr.length; i++){
    if(longStr.indexOf(shortStr[i]) !== -1){
      return "YES";
    }
 }

В цикле for перебираем символы переменной shortStr и используем метод indexOf(), чтобы проверить существование символов из shortStr в строке longStr. Как было оговорено в начале: обе строки должны иметь общую подстроку, и она может быть всего одним символом. Когда находится первое же совпадение, можно завершать цикл и вернуть YES.

Если цикл закончится сам, значит функция не нашла общих подстрок и от безысходности вернёт NO.

Код полностью:

function twoStrings(s1, s2) {
  let shortStr;
  let longStr;
  
  if(s1.length < s2.length){
    shortStr = s1;
    longStr = s2;
  }else{
    shortStr = s2;
    longStr = s1;
  }
  
  for(let i = 0; i < shortStr.length; i++){
    if(longStr.indexOf(shortStr[i]) !== -1){
      return 'YES'
    }
  }
  
  return 'NO'
}