当前位置:首页 > 日记 > 正文

javascript基础练习之翻转字符串与回文

javascript基础练习之翻转字符串与回文

翻转字符串

翻转字符串(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)); }}

感觉另外两个实现思路比我屌多了,自己在编程的路上才走没多远,一步一步来吧。

对了,别纠结翻转字符串和回文的区别了!翻转字符串仅仅是将倒序后的字符串返回;而回文面对的则是更长更复杂的句子,需要将过滤掉空格和标点符号的句子和倒序后的句子比较是否相等。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对的支持。

相关文章

php array_reverse 以相反的顺序返

php array_reverse 以相反的顺序返

实例代码,数组,顺序,电脑软件,php,php array_reverse函数返回一个单元顺序相反的数组,该函数有两个参数,第一个参数表示需要处理的数组,第二个参数可选,规定是否保留原始数组的键名。本文章通过实例向大家讲解array_reverse函数的使用方法。需…

怎么查看微信圈的收藏

怎么查看微信圈的收藏

收藏,电脑软件,微信圈,  当我们在微信朋友圈发现可读的值得保存的内容,我们会选择收藏起来,可是收藏起来的东西在哪里可以查看到呢?如果你不知道微信怎么查看收藏,可以看看下面的具体操作。微信圈查看收藏的方法1.打开微信,点击右下角的【我…

微信小程序开发之麦克风动画 帧动

微信小程序开发之麦克风动画 帧动

帧动画,程序开发,动画,淡出,麦克风,想做个录音机,第一步就卡在麦克风动画这里了.先上gif.再吐槽.① 上面gif中声波的动画是个半成品.没有循环播放.在微信小程序的开发文档上找了很久,也没找到循环模式的参数设置.用setInterval()并不执行动…

Photoshop简单几步制作字符文字

Photoshop简单几步制作字符文字

文字,字符,几步,简单,电脑软件,今天为大家介绍Photoshop简单几步制作字符文字方法,只需几步即可完成,好了,下面我们来学习吧!步骤:1、新建一块画布2、选择&ldquo;油漆桶工具&rdquo;,填充为黑色3、选择&ldquo;横排文字工具&rdquo;,设定如下4、在图…

jsp中实现带滚动条的table表格实例

jsp中实现带滚动条的table表格实例

实例代码,滚动条,表格,电脑软件,jsp,如下所示:<div style="width:700px; height:225px; overflow:auto;"> <table border="1" width="100%" cellpadding="0" cellspacing="0"> <tr> <td width="3%">0</td> <td width="7%…

react-native ListView下拉刷新上

react-native ListView下拉刷新上

上拉加载,下拉刷新,代码,电脑软件,react,本文介绍了react-native ListView下拉刷新上拉加载实现。分享给大家,具体如下:先看效果图下拉刷新React Native提供了一个组件可以实现下拉刷新方法RefreshControl使用方法<ListView refreshControl={…

qq安全中心取消绑定图解步骤

qq安全中心取消绑定图解步骤

取消,安全中心,绑定,步骤,方法,  多朋友现在换手机都很频繁,而QQ安全中心手机版又只能通过手机解绑。今天,晓霞李晓波就为大家分享一下QQ解绑QQ安全中心手机版的方法。qq安全中心取消绑定的方法首先,我们需要确保手机是否安装QQ安全中心手机…

Angular.js实现多个checkbox只能选

Angular.js实现多个checkbox只能选

方法,选择,多个,示例,电脑软件,首先来看看效果效果实现这样的效果,必须使用指令了,只有使用指令才能单独控制每一个scope。示例代码如下:<div class="form-group"> <label class="col-sm-2 control-label">请选择文章主题色彩</label> …

2013版ppt如何控件激活工具

2013版ppt如何控件激活工具

工具,控件,激活,方法,电脑软件,  很多人在用ppt的时候,会出现弹出提示为&ldquo;此演示文稿中的一些控件无法激活。这些控件可能未在此计算机中注册&rdquo;的问题,导致ppt中的动画无法正常播放,下面给大家分享PPT2013控件激活工具的方法,希望…

JS传播事件、取消事件默认行为、阻

JS传播事件、取消事件默认行为、阻

事件,默认,取消,详解,电脑软件,1.事件处理程序的返回值 通常情况下,返回值false就是告诉浏览器不要执行这个事件相关的默认操作。例如,表单提交按钮的onclick事件处理程序能通过返回false阻止浏览器提交表单,再如a标签的onclick事件处…

Angular.JS中指令ng-if、ng-show/n

Angular.JS中指令ng-if、ng-show/n

使用教程,指令,电脑软件,Angular,JS,前言最近在做一个项目改版,第一次在项目中真正使用Angular,和平时自己写写小demo,做做练习的感觉还是非常不同的,感觉非常的新鲜。有几个指令是经常用到的,这里由于这几个有点共性,所以一起介绍一下ng-if,ng…

ES6新特性三: Generator | 生成器函

ES6新特性三: Generator | 生成器函

函数,新特性,生成器,详解,电脑软件,本文实例讲述了ES6新特性三: Generator(生成器)函数。分享给大家供大家参考,具体如下:1. 简介① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改变。② 写法:function* f(…