Как поменять местами начальную строку и сэкономить место - PullRequest
0 голосов
/ 03 августа 2020

Как перевернуть начальную строку и сэкономить место более правильно, чем в моем решении. Мне нужно преобразовать исходную строку, чтобы сделать это в обратном порядке, но сохранить тот же порядок пробелов, что и в исходной строке 'некоторый текст с пробелами' // => «seca psht iwtx etemos»

function test(str, result = "") {
  let res = str.split('').reverse().join('')

  for (let i = 0; i < res.length; i++) {
    if (str[i] === " ") {
      result += ` ${res[i]}`
      str[i + 1];
    } else if (str[i] !== " " && res[i] === " ") {
      result += ""
    } else {
      result += res[i];
    }
  }
  return result
}

console.log(test('some text with spaces')) //=> "seca psht iwtx etemos"

Ответы [ 5 ]

1 голос
/ 03 августа 2020
function test(str) {
  const letters = str.split(""); // make array so we can modify it
  const spaceIndexes = letters.reduce((arr, letter, index) => {
    if (letter === " ") arr.push(index);
    return arr;
  }, []);
  const reversed = letters.filter(l => l !== ' ').reverse(); // reverse and delete spaces
  spaceIndexes.forEach((index) => reversed.splice(index, 0, " ")); // insert spaces at previous places
  return reversed.join(""); // return as a string
}
1 голос
/ 03 августа 2020

Вы можете взять один l oop без разделения и получить непробельные символы с конца и вставить пробелы, если они найдены на фактической длине новой строки.

function test(str) {
    let i = str.length,
        s = '';

    while (i--) {
        if (str[i] === ' ') continue;
        while (str[s.length] === ' ') s += ' ';
        s += str[i];
    }
    return s;
}

console.log(test('some text with spaces'));
0 голосов
/ 03 августа 2020
let theString = "some text with spaces";
let spaceArr = []  // we will store spaces position in this array
let pos = 0
let strArr = theString.split(" ")
for(let i=0; i<strArr.length-1; i++){
  spaceArr.push(pos + strArr[i].length)
  pos = pos+1 + strArr[i].length
}
// now lets remove spaces , reverse string, put back orignal spaces 
let res = strArr.join("").split("").reverse().join("").split("")
spaceArr.forEach((item,index)=>{
  res.splice(item,0," ") 
})
console.log(res.join(""))
0 голосов
/ 03 августа 2020

Не совсем уверен, есть ли лучшее решение, чем это. Но лучшее, что я мог придумать на данный момент

Алгоритм равен

  • Найдите пробел indexes в данном string
  • В обратном порядке sting
  • Добавьте пробел согласно indexes got above и замените любые дополнительные пробелы в string

function test(str) {
  const mapping = {};
  const pattern = /\s+/g;
  while (match = pattern.exec(str)) {
    mapping[match.index] = true;
  }

  return str.split('').reverse().reduce((acc, cur, index) => {
    if(mapping[index]) acc += ' ';
    acc += cur.replace(pattern, '');
    return acc;
  }, '');
}

// seca psht iwtx etemos
console.log(test('some text with spaces'))
0 голосов
/ 03 августа 2020

Это вернет все непустые буквы в обратном порядке со всеми пробелами в позициях исходной строки:

function test(str) {
  let i=-1,spaces=[];
  while ((i=str.indexOf(' ',i+1))>-1) spaces.push(i); // find space positions
  let res=str.replace(/ /g,'').split('').reverse();   // remove spaces and 
                                                      // turn into array and reverse it
  spaces.forEach(i=>res.splice(i,0,' '))              // put spaces back into array
  return res.join('');                                // turn array to string and return
}

let str="let us try this function.";
console.log(str);
console.log(test(str))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...