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 相关文章推荐
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
Oct 09 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
Javascript 实现计算器时间功能详解及实例(二)
Jan 08 Javascript
微信小程序对接七牛云存储的方法
Jul 30 Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 Javascript
element-ui 上传图片后清空图片显示的实例
Sep 04 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
Node.js Windows Binary二进制文件安装方法
May 16 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
Python socket服务常用操作代码实例
2020/06/22 Python
商务英语专业毕业生自荐信
2013/11/05 职场文书
员工培训邀请函
2014/02/02 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
群众路线党课主持词
2014/04/01 职场文书
村级换届选举方案
2014/05/10 职场文书
疾病防治方案
2014/05/31 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
教师求职自荐信范文
2015/03/04 职场文书
团结主题班会
2015/08/13 职场文书