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 相关文章推荐
统一接口:为FireFox添加IE的方法和属性的js代码
Mar 25 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
JavaScript对Cookie进行读写操作实例
Jul 25 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
Oct 24 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
浅谈Redux中间件的实践
Jul 27 Javascript
微信小程序文章详情页面实现代码
Sep 10 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
vue点击按钮动态创建与删除组件功能
Dec 29 Javascript
微信小程序静默登录的实现代码
Jan 08 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
把77A收信机改造成收音机
2021/03/02 无线电
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
js 创建书签小工具之理论
2011/02/25 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
Vue中的字符串模板的使用
2018/05/17 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
Python urlopen 使用小示例
2008/09/06 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python中super函数用法实例分析
2019/03/18 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python树的同构学习笔记
2019/09/14 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
物业公司采购员岗位职责
2013/12/31 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android