FCC题目 Check for Palindromes

2017-04-04  本文已影响32人  a1838b5b5d28

要求

如果给定的字符串是回文,返回true,反之,返回false。

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

函数参数的值可以为"racecar","RaceCar"和"race CAR"。

当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。

这是一些对你有帮助的资源:

String.replace()
String.toLowerCase()


起初看到这么一个要求 小case吗!!分分钟搞定啊!于是如下代码出现了

function palindrome(str){
        var arr=str.split('');//分割字符串为数组
        var newarr=arr.reverse();//将数组反转
        //比较数组
        for(var i=0;i<arr.length;i++){
            if(arr[i]!==newarr[i]){
                return false;
            }
        }
        return true;
    }

理所当然 代码GG 于是google之,发现 reverse() 这个方法是在执行后会改变原数组而不是返回一个新数组
于是修改代码如下

function palindrome(str){
        var arr=str.split('');//分割字符串为数组
        var newarr=str.split('');//赋给另一个数组用来保存
        arr.reverse();//将数组反转
        //比较数组
        for(var i=0;i<arr.length;i++){
            if(arr2[i]!==newarr[i]){
                return false;
            }
        }
        return true;
    }

然后 又GG
我又去检查发现题目给的样例里面还有大小写,特殊字符!!!
这才想到了题目给的提示
repalce() 利用正则替换字符串
totoLowerCase() 将字符串转换成小写
再次修改代码

function palindrome(str) {
  // Good luck!
      var str1=str.replace(/\W+/g,"");
          str1=str1.replace(/\_+/g,"");
          str1=str1.toLowerCase();
      var arr=str1.split('');//定义将字符串打散后的数组
      var newarr=str1.split('');//将该数组再次保存 后面会调用reverse方法将其改变, arr会发生变化 ,所以将数组另存一份为newarr
      arr.reverse();//反转数组
      //比较数组
          for(var i=0;i<arr.length;i++){
            if(arr[i]!==newarr[i]){
              return false;         
            } 
          }
            return true;
          
    }
    
    palindrome("not a palindrome");

Ctrl+Enter 完美!

上一篇 下一篇

猜你喜欢

热点阅读