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

Два способа проверить палиндромы в JavaScript

Эта статья основана на бесплатном кодовом лагере основных алгоритма сценариев «Проверить палиндромы». Палиндром – это слово, фраза, номер или другая последовательность символов, которые читают то же самое обратное или вперед. Слово «Палиндром» было впервые придумано английским драматургом Бен Джонсоном в 17 веке, от

Автор оригинала: FreeCodeCamp Community Member.

Эта статья основана на бесплатном кодовом лагере основных алгоритма сценариев » Проверьте на палиндромес “.

Палиндром это слово, фраза, номер или другая последовательность символов, которые читают одинаковую обратную или вперед. Слово «Палиндром» было впервые придумано английским драматургом Бен Джонсон В 17 веке от греческих корней PALIN («Опять») и Дромос («Путь, направление»). – SRC. Википедия

В этой статье я собираюсь объяснить два подхода, сначала со встроенными функциями и второй с использованием цикла для цикла.

Алгоритм Задача

function palindrome(str) {
  return true;
}
palindrome("eye");

Предоставил тестовые случаи

  • Палиндром (“Гоночная машина”) должен вернуть истину
  • Палиндром (“не палиндром”) должен вернуть ложь
  • Палиндром («Человек, план, канал. Панама») должен вернуть истину
  • Палиндром («никогда не странно или даже») должен вернуть истину
  • Палиндром (“Нет”) должен вернуть ложь
  • Палиндром («почтиомла») должен вернуть ложь
  • Палиндром («Мой возраст 0, 0 Si Ega YM».) должен вернуть истину
  • Палиндром («1 глаз для 1 глаз».) должен вернуть ложь
  • Палиндром (“0_0 (:/- \:) 0-0”) должен вернуть истину

Какое регулярное выражение нам нужно будет пройти последний тестовый случай?

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

Когда поиск матча требуется нечто большее, чем прямое совпадение, шаблон включает в себя специальные символы.

To pass the last test case, we can use two Regular Expressions:

/[^A-Za-z0–9]/g  or

/[\W_]/g

\ W Удаляет Все не буквенно-цифровые символы :

  • \ W соответствует любому не слова
  • \ W эквивалентно [^ a-za-z0-9_]
  • \ W соответствует всему, что не заключено в скобки

Что это обозначает?

[^A-Z] matches anything that is not enclosed between A and Z

[^a-z] matches anything that is not enclosed between a and z

[^0-9] matches anything that is not enclosed between 0 and 9

[^_] matches anything that does not enclose _

Но в нашем тестовом случае нам нужен палиндром (« 0_0 (:/- \:) 0-0 »), чтобы вернуться правда , что означает « _ (:/- \:) – ” должен быть сопоставлен.

Нам нужно будет добавить « _ », чтобы пройти этот конкретный тестовый случай.

We now have "\W_"

Нам также нужно добавить G Флаг для глобального поиска.

We finally have "/[\W_]/g"

1. Проверьте палиндромы со встроенными функциями

Для этого решения мы будем использовать несколько методов:

  • Толкание () Способ возвращения вызывающего строкового значения, преобразованного в нижний регистр.
  • заменить () Способ вернуть новую строку с некоторыми или всеми спичками шаблона, замененной заменой. Мы будем использовать одно из Regexp, которое мы только что создали ранее.
  • Сплит () Способ расщепляет струнный объект в массив строк, отделяя струну на субъекты.
  • Обратный () Метод изменяет массив на месте. Первый элемент массива становится последним, и последний становится первым.
  • Присоединяйтесь () Метод объединяет все элементы массива в строку.
function palindrome(str) {
  // Step 1. Lowercase the string and use the RegExp to remove unwanted characters from it
  var re = /[\W_]/g; // or var re = /[^A-Za-z0-9]/g;
  
  var lowRegStr = str.toLowerCase().replace(re, '');
  // str.toLowerCase() = "A man, a plan, a canal. Panama".toLowerCase() = "a man, a plan, a canal. panama"
  // str.replace(/[\W_]/g, '') = "a man, a plan, a canal. panama".replace(/[\W_]/g, '') = "amanaplanacanalpanama"
  // var lowRegStr = "amanaplanacanalpanama";
     
  // Step 2. Use the same chaining methods with built-in functions from the previous article 'Three Ways to Reverse a String in JavaScript'
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  // lowRegStr.split('') = "amanaplanacanalpanama".split('') = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"]
  // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].reverse() = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"]
  // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].join('') = "amanaplanacanalpanama"
  // So, "amanaplanacanalpanama".split('').reverse().join('') = "amanaplanacanalpanama";
  // And, var reverseStr = "amanaplanacanalpanama";
   
  // Step 3. Check if reverseStr is strictly equals to lowRegStr and return a Boolean
  return reverseStr === lowRegStr; // "amanaplanacanalpanama" === "amanaplanacanalpanama"? => true
}
 
palindrome("A man, a plan, a canal. Panama");

Без комментариев:

function palindrome(str) {
  var re = /[\W_]/g;
  var lowRegStr = str.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}
palindrome("A man, a plan, a canal. Panama");

2. Проверьте на палиндромы с петлей для цикла

Половина индексации (Len/2) имеет преимущества при обработке больших строк. Мы проверяем конец с каждой части и разделите количество итераций внутри петли на два.

function palindrome(str) {
 // Step 1. The first part is the same as earlier
 var re = /[^A-Za-z0-9]/g; // or var re = /[\W_]/g;
 str = str.toLowerCase().replace(re, '');

 // Step 2. Create the FOR loop
 var len = str.length; // var len = "A man, a plan, a canal. Panama".length = 30
 
 for (var i = 0; i < len/2; i++) {
   if (str[i] !== str[len - 1 - i]) { // As long as the characters from each part match, the FOR loop will go on
       return false; // When the characters don't match anymore, false is returned and we exit the FOR loop
   }
   /* Here len/2 = 15
      For each iteration: i = ?    i < len/2    i++    if(str[i] !== str[len - 1 - i])?
      1st iteration:        0        yes         1     if(str[0] !== str[15 - 1 - 0])? => if("a"  !==  "a")? // false
      2nd iteration:        1        yes         2     if(str[1] !== str[15 - 1 - 1])? => if("m"  !==  "m")? // false      
      3rd iteration:        2        yes         3     if(str[2] !== str[15 - 1 - 2])? => if("a"  !==  "a")? // false  
      4th iteration:        3        yes         4     if(str[3] !== str[15 - 1 - 3])? => if("n"  !==  "n")? // false  
      5th iteration:        4        yes         5     if(str[4] !== str[15 - 1 - 4])? => if("a"  !==  "a")? // false
      6th iteration:        5        yes         6     if(str[5] !== str[15 - 1 - 5])? => if("p"  !==  "p")? // false
      7th iteration:        6        yes         7     if(str[6] !== str[15 - 1 - 6])? => if("l"  !==  "l")? // false
      8th iteration:        7        yes         8     if(str[7] !== str[15 - 1 - 7])? => if("a"  !==  "a")? // false
      9th iteration:        8        yes         9     if(str[8] !== str[15 - 1 - 8])? => if("n"  !==  "n")? // false
     10th iteration:        9        yes        10     if(str[9] !== str[15 - 1 - 9])? => if("a"  !==  "a")? // false
     11th iteration:       10        yes        11    if(str[10] !== str[15 - 1 - 10])? => if("c" !==  "c")? // false
     12th iteration:       11        yes        12    if(str[11] !== str[15 - 1 - 11])? => if("a" !==  "a")? // false
     13th iteration:       12        yes        13    if(str[12] !== str[15 - 1 - 12])? => if("n" !==  "n")? // false
     14th iteration:       13        yes        14    if(str[13] !== str[15 - 1 - 13])? => if("a" !==  "a")? // false
     15th iteration:       14        yes        15    if(str[14] !== str[15 - 1 - 14])? => if("l" !==  "l")? // false
     16th iteration:       15        no               
    End of the FOR Loop*/
 }
 return true; // Both parts are strictly equal, it returns true => The string is a palindrome
}

palindrome("A man, a plan, a canal. Panama");

Без комментариев:

function palindrome(str) {
 var re = /[^A-Za-z0-9]/g;
 str = str.toLowerCase().replace(re, '');
 var len = str.length;
 for (var i = 0; i < len/2; i++) {
   if (str[i] !== str[len - 1 - i]) {
       return false;
   }
 }
 return true;
}
palindrome("A man, a plan, a canal. Panama");

Я надеюсь, что вы нашли это полезным. Это является частью моего «Как решить серию статей« Как решить фкКК-алгоритмы ».

Два способа подтвердить окончание строки в JavaScript в этой статье, я объясню, как решить «подтвердить« подтвердить концовку ».

Три способа обратить вспять строку в артикул JavaScriptThits основаны на бесплатном кодовом лагере основных алгоритма сценариев «обратная строка»

Три способа активизировать число в артикул JavaScriptTishis основано на бесплатном кодовом лагере основных алгоритма сценариев «Factorialize ряд»

Три способа найти самое длительное слово в строке в JavaScript Эта статья основана на бесплатном кодовом лагере основных алгоритма сценариев «Найти самое длинное слово в строке».

Три способа к названию.

Три способа вы можете найти наибольшее количество в массиве с использованием JavaScript в этой статье, я собираюсь объяснить, как решить бесплатный код Code Camp «Возвращение крупнейших номеров в массивах« Вызов ». Этот…

Если у вас есть собственное решение или какие-либо предложения, поделитесь их ниже в комментариях.

Или вы можете следовать за мной на Средний , Twitter , Github и LinkedIn , сразу после нажатия зеленого сердца ниже 😉

# StaySurious, # KeepOnhacking & # MasteithiThappen!

Ресурсы