不使用.reverse()方法

时间:2017-01-19 07:09:20

标签: javascript string

我正在尝试将原始字符串参数与其反向进行比较。本质上,该函数应该验证给定的字符串是否是回文。要点:

  1. 字符串需要转换为全部小写,我这样做。
  2. 字符串只需要包含字母数字字符,我这样做了。
  3. 比较时,原始字符串和格式化字符串必须匹配。如果是,则返回布尔值true,否则返回false。
  4. 以下是源代码:JS Fiddle |或者,代码如下:

    function palindrome(str) {
    
      var reverseString;
      var temp;
      var formatted;
    
      // make sure input gets converted to lowercase  
      temp = str.toLowerCase();
    
      // make sure all non-alphanumeric characters get removed  
      // once converted to lowercase, ensure that all special characters and digits are stripped from the string
      formatted = temp.replace(/[^A-Za-z]/g, '');
    
    
      // now we need to compare two strings: the raw input vs the string in reverse  
      for (i = formatted.length -1; i >= 0; i--) {
    
        reverseString += formatted[i];
      }
        if (reverseString === str) {
           return true;
      }
        return false;
    
    }
    
    
    palindrome("123$EYE");
    

5 个答案:

答案 0 :(得分:1)

为什么反向和比较?你只需要比较头部和尾部相同位置的字符。首先是str[0]str[length - 1],然后是str[1]str[length - 2],依此类推。直到中间,或任何比较失败。

function isPalindrome(str) {
  var len = str.length
  for (var i = 0; i < Math.ceil(len/2); i++) {
    if (str[i] !== str[len - 1 - i]) {
      // or add more comparison rules here
      return false
    }
  }
  return true
}

isPalindrome('1')    // true
isPalindrome('121')  // true
isPalindrome('1221') // true
isPalindrome('1211') // false

答案 1 :(得分:1)

function palindrome(str) {

  var reverseString=""; // initialize every string to ""
  var temp="";
  var formatted="";

  temp = str.toLowerCase();

  formatted = temp.replace(/[^A-Za-z0-9]/g, ''); // I added 0-9 in your regex to have numbers in your string

  for (i = formatted.length -1; i >= 0; i--) {
    reverseString += formatted[i];
  }

    if (reverseString === formatted) { // change str to formatted
       return true;
  }
    return false;
}

var isPal = palindrome("123$EYE");
alert(isPal); // try it on `alert` if it is true or false

您的代码没问题。但是你有一些缺陷。您应该将String初始化为"",以使其价值不会为undefined。您放在if statement上的那个是str,这是您原来的字符串字,您应该放置formatted字符串,因为这是您删除特殊字符的字符串。

答案 2 :(得分:1)

字母数字字符?

function palindrome(str) {
    var temp;
    temp = str.toLowerCase();
    temp = temp.replace(/[^A-Za-z0-9]/g, '');
    console.log(temp);
    for (let a = 0, b = temp.length - 1; b > a; a++, b--) {
        if (temp.charAt(a) !== temp.charAt(b))
            return false;
    }
    return true;
}

答案 3 :(得分:0)

您没有初始化reverseString所以它在开头就是undefined。将字符'a'添加到undefined会返回字符串'undefineda',而不是您可能期望的'a'

将您的代码更改为

var reverseString = ''; 

它会工作

答案 4 :(得分:0)

这是扭转文本的优雅方式:

var rev = temp.split('').reverse().join(''); // reverse  

查看小提琴:

&#13;
&#13;
function palindrome(str)
{
  var temp = str.toLowerCase() // converted to lowercase  
                .replace(/[^A-Za-z]/g, ''); // non-alphanumeric characters removed
  var rev = temp.split('').reverse().join(''); // reverse
  console.log(temp, ' === ', rev, ' is ', temp === rev);
  if(temp === rev)
  {
    return true;
  }
  return false;
}

var out = palindrome("123$EYE");
document.getElementById('divOutput').innerHTML = out;
&#13;
<div id="divOutput"></div>
&#13;
&#13;
&#13;