Рубрики
Без рубрики

Что такое палиндром!?!?

Технические интервью для кодирования или проблемы с кодами на веб -сайтах, таких как LeetCode, Codewars или Hackerrank, могут … с меткой JavaScript, алгоритмами.

Технические интервью для кодирования или проблемы с кодом на веб -сайтах, таких как LeetCode, Codewars или Hackerrank, часто могут включать различные вопросы, которые вращаются вокруг единственной идеи. Например, палиндром может быть основой множества различных проблем, которые могут иметь различные требования для решения проблемы на основе конкретного вопроса. В случае, вам представлена проблема, которая вращается вокруг палиндромов, было бы полезно узнать, что такое палиндром. Давайте погрузимся в то, что именно делает палиндром и пару проблем, которые сосредоточены вокруг них.

Палиндром может быть словом, номером, фразой или последовательности различных символов, которые читают те же форварды, что и в обратном направлении.

Палиндром может быть изготовлен из строки символов при условии, что все символы в строке встречаются одинаково. Или все символы в строке встречаются одинаково раз, кроме как один характер, который встречается нечетное количество раз.

  • Примеры:

полдень является действительным палиндром

Гонковое время является действительным палиндром

Гонщики не является действительным палиндром

В первом примере выше всех символов встречается равномерное количество раз. Во втором примере все символы встречаются равномерно, кроме ‘e’ Это происходит только один раз (странная частота). В третьем недействительный Пример, у нас есть два Возникновение персонажа, который происходит нечетно, что невозможно создать палиндром из этой цепочки символов.

Теперь давайте решим несколько проблем, которые сосредоточены вокруг палиндромов.

  • 1. Учитывая строку нижних символов [A-Z], определяйте, является ли это палиндром. Для простоты мы не будем беспокоиться о каких -либо случаях краев в этой проблеме
const isPalindrome = (str) => {
    const reversedString = str.split('').reverse().join('')
    return str === reversedString
}

isPalindrome("racecar")
=> true

isPalindrome("racecars")
=> false

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

Тем не менее, мы должны всегда знать о последствиях нашего кода. Давайте решим это снова без использования каких-либо встроенных функций …

const isPalindrome = (str) => {
    for (let i = 0; i < str.length / 2; i++) {
       if (str[i] != str[str.length - (i + 1)]) return false
       // loops through characters on the front half 
       // of string and compares against the opposing 
       // character on the back half of the string
    }
    return true
}

isPalindrome("racecar")
=> true

isPalindrome("racecars")
=> false

Я сравнивал производительность двух вышеупомянутых решений, используя строку «Racecar» на Jsbench Анкет Этот инструмент заявил, что первое решение было на 89,56% медленнее, чем второе решение. Иногда меньше кода на самом деле более медленный код.

  • 2. Учитывая строку нижних символов [A-Z], определяйте, может ли палиндром быть созданным из всех заданных символов. Для простоты мы не будем беспокоиться о каких -либо случаях краев в этой проблеме
const isPalindromePossible = (str) => {
   const frequencyCounter = {}
   for (let c of str) {
     frequencyCounter[c] = (frequencyCounter[c] || 0) + 1
   }

   let charsWithOddFrequency = 0 
   for (let c in frequencyCounter) {
     if (frequencyCounter[c] % 2 !== 0) charsWithOddFrequency += 1
   }
   return charsWithOddFrequency <= 1
}

isPalindromePossible("acerrac") //can be rearranged into 'racecar'
=> true

isPalindromePossible("acerracs") //cannot be rearranged into a palindrome, more than one character with odd frequency count
=> false

В приведенном выше решении я создал частотный счетчик, чтобы отслеживать численные случаи каждого символа в строке, используя цикл для/из петли. В цикле FO/In мы проверяем нечетные случаи каждого символа в строке, если у нас есть более одного символа с нечетным количеством частоты, мы не можем создать палиндром из данных символов.

Я надеюсь, что это помогло вам понять, что такое палиндром и ограничения, связанные с тем, как вы можете его создать. Если у вас есть какие -либо вопросы или какие -либо другие забавные проблемы, вращающиеся вокруг палиндромов, бросите их в комментарии ниже.

Ваше здоровье!

Оригинал: “https://dev.to/jtswisher/what-s-a-palindrome-221o”