JavaScript常用算法之——判断是否为回文字符串

91 阅读2分钟

  先聊一下什么是回文字符串?实际上就是正序和倒序一致的字符串,正所谓“上海自来水来自海上,中山在建房建在山中”。咳咳...跑题了
  理解了回文那么再来看场景,"abcba"即是一个回文字符串,而"abcdba"则非回文字符串。在算法处理后,前者应返回true,而后者则返回false
  前排提示:此算法相关不区分大小写,即a与A在判定时是相等的

  • 算法1
  思路主要是对字符串进行正循环和逆循环,如完全一致则返回true,否则则返回false
  
  function isPalindromicStr1 (str) {
      // 判空,此时应该判为true还是false就看自己需求了,我这里是空字符串判定为true
      if (!str.length) {
          return true;
      }
      str = str.toLowerCase().split(''); //转换为小写并分割为数组
      var start = 0, end = str.length - 1;
      // while循环判断
      while(start < end) {
          //相等则修改索引继续往下比较
          if (str[start] === str[end]) {
              start++;
              end--;
          }
          else {
              return false;
          }
      }
      return true;
  }
  • 算法2
  思路和算法1类似,但循环采取递归的方式。递归结束的方式有两种,一是字符串全部比较完成,此时返回true并跳出递归,另外一种情况则是出现了不一致的比对结果,此时返回false并跳出递归。
  
  function isPalindromicStr2 (str) {
      // 判空,此时应该判为true还是false就看自己需求了,我这里是空字符串判定为true
      if (!str.length) {
          return true;
      }
      str = str.toLowerCase(); //转换为小写
      let end = str.length - 1;
      //出现不一致,返回false
      if (str[0] !== str[end]) {
          return false;
      }
      //删掉字符串首尾,继续进行递归
      return isPalindromicStr2(str.slice(1, end)); 
  } 
  • 算法3
  算法3的思路是直接将字符串进行逆序处理,并且与原字符串进行比较,一致则返回true,不一致则返回falsefunction isPalindromicStr3 (str) {
      var arr = str.toLowerCase().split(''); //转换为小写并分割为数组
      var reverseStr = arr.reverse().join(''); //数组逆序并合并为字符串
      return str === reverseStr;//直接返回比较结果
  }