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 相关文章推荐
jquery $(document).ready() 与window.onload的区别
Dec 28 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
JavaScript 错误处理与调试经验总结
Aug 10 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
vue-cli 组件的导入与使用教程详解
Apr 11 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 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
一篇不错的PHP基础学习笔记
2007/03/18 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
php验证session无效的解决方法
2014/11/04 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
vue跨域解决方法
2017/10/15 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
python中的二维列表实例详解
2018/06/19 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
思想品德自我鉴定
2013/10/12 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
项目合作计划书
2014/01/09 职场文书
中学教师自我鉴定
2014/02/07 职场文书
《观舞记》教学反思
2014/04/16 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
毕业证明书
2015/06/19 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
导游词之安徽九华山
2019/09/18 职场文书
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js