javascript基础练习之翻转字符串与回文


Posted in Javascript onFebruary 20, 2017

翻转字符串

翻转字符串(Reverse a String),就是把字符串倒序处理的意思,比如给定一个字符串”hello”,翻转后应该返回”olleh”。

测试用例

  1. reverseString("hello") 应该返回 “olleh”
  2. reverseString("Greetings from Earth") 应该返回 “htraE morf sgniteerG”

实现思路

这里说最方便的方法就是将字符串转成数组,再颠倒数组并转成字符串返回。需要用到字符串对象和数组对象的内置方法:

  1. String.split()
  2. Array.reverse()
  3. Array.join()

具体可以去看JavaScript参考手册

function reverseString(str) {
 return str.split('').reverse().join('');
}

reverseString("hello");

一句return搞定,很简单有木有?!

在此基础上来看看回文是怎么玩的⬇️

回文

“Madam,I'mAdam.” 这是亚当在伊甸园里碰上夏娃说的第一句话,这句话正着读和反着读一模一样,这样的句子就是回文,英文里叫Palindrome。

举个栗子——“上海自来水来自海上”,这句话顺着读和反着读都是相同的,还有很多英语单词也是:Level、Madam、Radar、LOL(哈哈哈)…

测试用例

  1. palindrome("Race Car") 应该返回 true
  2. palindrome("not a palindrome") 应该返回 false
  3. palindrome("0_0 (: /-\ :) 0-0") 应该返回 true

实现思路

我们需要写一个叫palindrome()的方法,传入一个叫str的参数,如果str是一个Palindromes将返回true,反之为false。

需要注意将标点符号和空格去掉并toUpperCase or toLowerCase后再进行判断。

需要用到以下知识点:

  • 正则表达式 (regular expression) ,用来过滤符号和空格
  • String.replace() 替换与正则表达式匹配的子串
  • String.toLowerCase() 把字符串转换为小写

关于正则表达式

这里要求匹配大小写英文字母和整数,任何标点符合和空格将被过滤掉。所以可以使用 /[^A-Za-z0?9]/g 或者 /[\W_]/g

  • [^A-Z] 匹配非26个大写字母中的任意一个
  • [^a-z] 匹配非26个小写字母中的任意一个
  • [^0-9] 匹配非0到9中的任意一个数字
  • [^_] 匹配非下划线
  • ^ 匹配字符串的开始
  • \w 注意是小写,匹配字母或数字或下划线或汉字
  • \W 注意是大写,匹配任意不是字母、数字、下划线、汉字的字符,等价于[^A-Za-z0-9_]
  • g 表示全局搜索

这是我的方法:

function palindrome(str) {
 str = str.replace(/[\W_]/g,'').toLowerCase();
 var reverseStr = str.split('').reverse().join('');
 return str===reverseStr;
}

palindrome("eye");

我在网上看到还可以用For循环来实现:

function palindrome (str) {
 var reg = /[\W_]/g,
 regStr = str.toLowerCase().replace(reg, ''),
 len = regStr.length;

 for (var i = 0, halfLen = len / 2; i < halfLen; i++){
 if (regStr[i] !== regStr[len - 1 - i]) {
  return false;
 }
 }
 return true;
}

这个思路很巧妙的运用了回文的特点,把整个字符串切成一半,循环遍历并依次判断首尾字符是否相等。

还有个运用了递归的实现:

function palindrome (str) {
 // 删除字符串中不必要的字符
 var re = /[\W_]/g;
 // 将字符串变成小写字符
 var lowRegStr = str.toLowerCase().replace(re, '');
 // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
 if (lowRegStr.length === 0) {
 return true;
 }

 // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
 if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
 return false;
 } else {
 return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
 }
}

感觉另外两个实现思路比我?哦嗔耍?约涸诒喑痰穆飞喜抛呙欢嘣叮?徊揭徊嚼窗伞?/p>

对了,别纠结翻转字符串和回文的区别了!翻转字符串仅仅是将倒序后的字符串返回;而回文面对的则是更长更复杂的句子,需要将过滤掉空格和标点符号的句子和倒序后的句子比较是否相等。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
jquery 快速回到页首的方法
Dec 05 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
jQuery插件pagewalkthrough实现引导页效果
Jul 05 Javascript
js识别uc浏览器的代码
Nov 06 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
JavaScript中继承原理与用法实例入门
May 09 Javascript
JS实现动态修改table及合并单元格的方法示例
Feb 20 #Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 #Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 #Javascript
js中new一个对象的过程
Feb 20 #Javascript
利用node.js搭建简单web服务器的方法教程
Feb 20 #Javascript
jQuery实现鼠标跟随效果
Feb 20 #Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 #Javascript
You might like
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Python列表推导式的使用方法
2013/11/21 Python
python列表去重的二种方法
2014/02/14 Python
Python中__init__和__new__的区别详解
2014/07/09 Python
Python面向对象特殊成员
2017/04/24 Python
python实现上传下载文件功能
2020/11/19 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
安全生产实施方案
2014/02/23 职场文书
任命书范本大全
2014/06/06 职场文书
公司授权委托书范文
2014/08/02 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
校园安全学习心得体会
2016/01/18 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
A22国内电台短波广播频率表
2022/05/10 无线电