Написание функции палиндрома - PullRequest
1 голос
/ 14 июля 2020

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

function palindrome(str) {

  if (str == "") {
    return false;
  } else {
    const palia = str.replace(/[\W_]/g, "").toLowerCase();
    const number = palia.length;
    console.log(number);
    var num1 = number / 2;
    num1 = Math.floor(num1);
    console.log(num1);

    for (var i = 1; i < num1; i++) {
      var b = number - i;
      b++;
      console.log(b);
      if (palia[i] == palia[b]) {
        console.log("Ture");
        return true;

      } else {
        console.log("false");
        alg = "false";
        return false;
      };
    };
  };

};

console.log(palindrome("eye"));

И я знаю, что написал длинный код. Мои извинения. Я научусь писать другие способы. Но это выход с кодом = 0. при л oop. Пожалуйста помоги. Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 14 июля 2020

Должно быть так:

function palindrome(str, insensitive = true){
  let s = str.split(''), l = s.length, i = Math.floor(l/2), a = s.slice(0, i), b, r;
  if(l % 2 !== 0)i++;
  b = s.slice(i); b.reverse(); b = '^'+b.join('')+'$';
  r = insensitive ? new RegExp(b, 'i') : new RegExp(b);
  if(a.join('').match(r)){
    return true;
  }
  return false;
}
console.log(palindrome('eyes'));
console.log(palindrome('eye'));
console.log(palindrome('noon'));
console.log(palindrome('none'));
console.log(palindrome('Nun'));
console.log(palindrome('Nun', false));
0 голосов
/ 14 июля 2020

Вам нужно начинать l oop с индекса 0, а не 1.

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

Ваш расчет b неверен, это должно быть number - i - 1, а не number - i + 1. Например, если длина строки равна 6, вы должны сравнить элемент 0 с 5, 1 с 4 и 2 с 3.

Нет необходимости проверять пустую строку. Это палиндром, и l oop правильно его обнаружит (l oop немедленно остановится, поэтому он упадет до return true).

function palindrome(str) {

  const palia = str.replace(/[\W_]/g, "").toLowerCase();
  const number = palia.length;
  console.log(number);
  var num1 = number / 2;
  num1 = Math.floor(num1);
  console.log(num1);

  for (var i = 0; i < num1; i++) {
    var b = number - i - 1;
    console.log(b);
    if (palia[i] == palia[b]) {
      console.log("True");
    } else {
      console.log("False");
      return false;
    }
  }
  return true;
};

console.log(palindrome("eye"));
console.log(palindrome("abcdefg"));
console.log(palindrome("abcdeedcba"));
0 голосов
/ 14 июля 2020

Я прокомментировал строки, которые заменил ниже.

function palindrome(str) {

    if (str == ""){
        // Empty string is a palindrome
        // return false;
        return true;
    } else {
        const palia = str.replace(/[\W_]/g, "").toLowerCase();
        const number = palia.length;
        console.log(number);
        var num1 = number / 2;
        num1 = Math.floor(num1);
        console.log(num1);
    
        // Must compare from the first position
        //for (var i = 1; i < num1; i++){
        for (var i = 0; i <= num1; i++){
            var b = number - i;
            // Increment gives out of bound access
            //b++;
            b--;
            console.log(b);
    
            if (palia[i] == palia[b]){
                // Typo
                //console.log("Ture");
                console.log("True");
                return true;
    
            } else{
                console.log("false");
                alg = "false";
                return false;
                
            };
        };
    };         
};
    
palindrome("eye");
0 голосов
/ 14 июля 2020

В случае "глаза" для l oop не выполняется вообще, потому что 1 не меньше, но того же размера, что и длина num1.

0 голосов
/ 14 июля 2020

Есть много проблем с этим кодом

  • в l oop начать индексирование с 0
  • вы можете выполнить итерацию только до половины строки
  • "" на самом деле это палиндром
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...