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 相关文章推荐
Prototype使用指南之ajax
Jan 10 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
Mar 14 Javascript
JavaScript中的私有/静态属性介绍
Jul 26 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
JS+CSS实现美化的下拉列表框效果
Aug 11 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
Vue引入Stylus知识点总结
Jan 16 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
Feb 27 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处理斐波那契数列非递归方法
2012/02/04 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python 时间处理datetime实例
2008/09/06 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python set内置函数的具体使用
2019/07/02 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
Python文件操作的面试题
2013/06/22 面试题
初中生期末考试的自我评价
2013/12/17 职场文书
小学教师读书活动总结
2014/07/08 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫