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 表格工具集
Apr 25 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
javascript中数组的sort()方法的使用介绍
Dec 18 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
详解vue3中组件的非兼容变更
Mar 03 Vue.js
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连接SQLServer2005 的问题解决方法
2010/07/19 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python @property使用方法解析
2019/09/17 Python
python计算二维矩形IOU实例
2020/01/18 Python
Python基于当前时间批量创建文件
2020/05/07 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Python Selenium库的基本使用教程
2021/01/04 Python
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
给校长的一封检讨书
2014/09/20 职场文书
承诺函格式模板
2015/01/21 职场文书
英语读书笔记
2015/07/02 职场文书
2016新年问候语大全
2015/11/11 职场文书
golang中的并发和并行
2021/05/08 Golang
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL