序言我们把字符串、数组、正则化、排序、递归放到了简单的算法中。在下一个系列中,我将以系列文章的形式一一介绍。StringFlipWordsinaString给定一个字符串,您需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入:“Let'stakeLeetCodecontest”输出:“s'teLekatedoCteeLtsetnoc”注意:在字符串中,每个单词由一个空格分隔,字符串中不会有多余的空格。来源:LeetCode链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii解题思路:保证单词和空格的初始顺序;a)保证词序sequence不能改变;b)保证单词的反转。第一步:先把句子分开,分开后插入到数组中。数组的顺序就是单词的顺序。第二步:然后反转数组的每个单词。/***@param{string}s*@return{string}*/varreverseWords=function(s){letarr=s.split('')letresult=arr.map(item=>{返回项目。split('').reverse().join('')})returnresult.join('')};代码不够简洁,所以做下面的。varreverseWords=function(s){returns.split('').map(item=>item.split('').reverse().join('')).join('')};用正则表达式替换空格,\s表示空格。这里注意掌握split的两种用法。varreverseWords=function(s){returns.split(/\s/g).map(item=>item.split('').reverse().join('')).join('')};你也可以这样写。正则表达式/[\w']+/g表示识别一个词,括号表示可选项,w表示字符,[\w']表示可选字符和',多个元素,后接+号。注意:这不是一个好的解决方案。如果单词中包含逗号、括号等,会匹配到正则表达式的末尾,输出的答案将不尽如人意。varreverseWords=function(s){returns.match(/[\w']+/g).map(item=>item.split('').reverse().join('')).join('')};总结:本题涉及的知识点如下。String.prototype.splitString.prototype.matchArray.prototype.mapArray.prototype.reverseArray.prototype.joinCountBinarySubstrings给定一个字符串s,计算具有相同数量的0和1的非空(连续)子串的数量,以及这些子串中的所有0和所有1被合并。重复的子字符串计算它们的出现次数。示例1:输入:“00110011”输出:6解释:有6个连续1和0的个数相同的子串:“0011”、“01”、“1100”、“10”、“0011”和“01”.请注意,一些重复的子字符串会计算它们的出现次数。此外,“00110011”不是有效的子字符串,因为所有0(和1)都没有组合在一起。示例2:输入:“10101”输出:4解释:有4个子串:“10”、“01”、“10”、“01”,它们连续的1和0的个数相同。注意:s.length介于1和50,000之间。s仅包含“0”或“1”字符。来源:LeetCode链接:https://leetcode-cn.com/problems/count-binary-substrings这种比较难的题目,先找出输入输出的规律,然后实现。如何找到模式?发现输入输出关系,寻找突破点。解决方案1??第一步:先展示关系图,找到里面的规则。起点反复右移从0开始查找0011,找到后停止,然后从下一位开始查找到下一位的结果,利用下一位的子串来lastbitasThenextinput(newinput,sub-input)="递归引入了一个新的概念:重复查找过程。重复查找子串的过程:查找子串的行为可以提取为公共行为。参考视频:传送门第2步:伪代码实现为什么i
