Написать функцию, входной параметр которой является строка. Функция должно поменять местами самое длинное и самое короткое слово в строке

Рейтинг: 1Ответов: 1Опубликовано: 23.01.2023

Вот функция которая находит самое длинное и самое короткое слова, осталось поменять их местами

let minWord = "";
let maxWord = "";

function minMaxLengthWords(input)
{
    let len = input.length;
    let si = 0, ei = 0;
    let min_length = len;
    let min_start_index = 0;
    let max_length = 0;
    let max_start_index = 0;

    while (ei <= len)
    {
        if (ei < len && input[ei] != ' ')
        {
            ei++;
        }
        else
        {
            let curr_length = ei - si;

            if (curr_length < min_length)
            {
                min_length = curr_length;
                min_start_index = si;
            }

            if (curr_length > max_length)
            {
                max_length = curr_length;
                max_start_index = si;
            }
            ei++;
            si = ei;
        }
    }

    minWord =
    input.substring(min_start_index,min_start_index + min_length);
    
    maxWord =
    input.substring(max_start_index, max_length);
    
}

let a = "Мы хорошо провели время";

Ответы

▲ 1Принят

Если отсутствуют критерии для слов одинаковой длины, то будут обменены первые подходящие под условие слова, а код может быть таким:

let str = "Мы хорошо провели время";

function fMinMaxLenWordExchange(s) {
  // Разбиваем строку на массив слов
  let words = s.split(' ');
  // Формируем массив длин
  let lengths = words.reduce((prev, curr) => [...prev, curr.length], []);
  // Находим в массиве длин индексы минимального и максимального значений
  let minIndex = lengths.indexOf(Math.min(...lengths)),
      maxIndex = lengths.indexOf(Math.max(...lengths));
  // На основе полученных выше индексов меняем местами слова в массиве слов
  [words[minIndex], words[maxIndex]] = [words[maxIndex], words[minIndex]];
  // Собираем заново строку и выводим в консоль
  console.log(words.join(' '));
}

fMinMaxLenWordExchange(str);