codewars--js--Simple string expansion+ repeat(),includes()方法
问题描述:
Consider the following expansion:
solve("3(ab)") = "ababab" -- "ab" repeats 3 times
solve("2(a3(b))" = "abbbabbb" -- "a3(b)" == "abbb" repeats twice.
Given a string, return the expansion of that string.
Input will consist of only lowercase letters and numbers in valid parenthesis. There will be no letters or numbers after the last closing parenthesis.
More examples in test cases.
Good luck!
我的思路:
基本上我解题的步骤就是自己手动的步骤,惭愧惭愧!·
先找到最里面的括号,然后按要求扩展。
当(前没有数字的时候,直接将该对括号去掉,然后继续做。
我的答案:
function solve(str){ while(str.indexOf("(")!=-1){
var a=[];
var b=[];
var s=str.split("");
var left=str.lastIndexOf("(");
var right=str.indexOf(")");
if(/[1-9]/.test(s[left-1])){
b=str.slice(left+1,right);
for(var j=0;j<parseInt(s[left-1]);j++){
a.push(b);
} //可换成 a=b.repeat(parseInt(s[left-1]);
s.splice(left-1,right-left+2,a.join(""));
}else{
s.splice(left,1,"");
s.splice(right,1,""); }
str=s.join("");
}
return str;
}
优秀答案:
(1)
function solve(s) {
while (s.includes('(')) {
s = s.replace(/\d?\((\w*)\)/,(m,a)=>a.repeat(+m[0]||1));
}
return s;
}
(2)
const solve = s => s.includes`(` ? solve(s.replace(/(\d*)\(([a-z]+)\)/, (_,a,b)=> b.repeat(+a||1))): s;
js
(1)repeat()返回一个新的字符串对象,它的值等于重复了指定次数的原始字符串。
"acb".repeat(3); // "acbacbacb"
(2)
哈哈哈!
codewars--js--Simple string expansion+ repeat(),includes()方法的更多相关文章
- JS中string对象的一些方法
原文地址(包含所有的string对象的方法): http://www.dreamdu.com/javascript/object_string/ string.slice(startPos,endP ...
- JS中String对象常用的方法
1. stringObject.charAt(index) 参数:index 必需,即字符在字符串中的下标. 返回值: 返回在指定位置的字符.返回的字符是长度为 1的字符串.(length属性 ...
- JS - 给String.prototype添加replaceAll方法
String.prototype.replaceAll = function (targetStr, newStr) { var sourceStr = this.valueOf(); while ...
- js中string转map的方法
例如: var r = "{'msg':'你好'}" ; var map = eval("("+r+")"); //r为String类型的数 ...
- JS中String添加trim()方法
这么牛的JS竟然还要自己封装trim方法. 下面利用prototype和正则表达式的添加方式添加trim(): <script language="javascript"&g ...
- JS删除String里某个字符的方法
关于JS删除String里的字符的方法,一般使用replace()方法.但是这个方法只会删除一次,如果需要将string里的所以字符都删除就要用到正则. 1 2 3 4 var str = " ...
- 数组Array和字符串String的indexOf方法,以及ES7(ES2016)中新增的Array.prototype.includes方法
前言 我们在判断某一个字符是否存在于一个字符串中或者某一个值是否存在于一个数组中时,ES7之前我们需要使用indexOf,ES7引入了新的方法includes 语法 数组:Array.inexOf(s ...
- [JS]给String对象添加方法,使传入的字符串字符之间以空格分开输出
看到一个这样子的面试题: 给String对象添加一个方法,传入一个string类型的参数,然后将string的每一个字符间加空格返回,例如:addSpace("hello world&quo ...
- JS对象 String 字符串对象定义字符串的方法就是直接赋值。比如: var mystr = "I love JavaScript!"
String 字符串对象 在之前的学习中已经使用字符串对象了,定义字符串的方法就是直接赋值.比如: var mystr = "I love JavaScript!" 定义mystr ...
随机推荐
- Java入门 - 语言基础 - 19.方法
原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...
- Egret学习-TiledMap使用
环境说明: 引擎版本:5.2.4 Egret Wing 4.1.6 1.下载依赖,下载地址https://github.com/egret-labs/egret-game-library/tree/m ...
- SSM框架整合中,不报错,数据库只能存ID进去问题解决
嗯,这个错误其实不能算错误,是粗心造成的,在配置文件中对于传递的参数没有写#字符,直接写的的属性名.居然错了两次,哎!!! 嗯,还有一个问题,在动态SQL中,if标签中test属性中判断时,不能用大写 ...
- 第二阶段冲刺个人任务——five
今日任务: 合并程序(统计团队博客). 昨日成果: 优化统计团队博客结果界面的显示.
- 机器学习-TensorFlow建模过程 Linear Regression线性拟合应用
TensorFlow是咱们机器学习领域非常常用的一个组件,它在数据处理,模型建立,模型验证等等关于机器学习方面的领域都有很好的表现,前面的一节我已经简单介绍了一下TensorFlow里面基础的数据结构 ...
- Frameworks.Entity.Core 7
1描述:实体基类,与业务和架构无关名称:EntityBase属性:public abstract 2描述:/ MongoDB的一些扩展方法名称:MongoExtensions修饰: public st ...
- 超越队西柚考勤系统--Beta冲刺2
超越队西柚考勤系统- -beta冲刺2 格式描述 这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业链接 团队名称 超越队(西柚考勤系统) 这个作业的目标 对alpha版本的程序进行改进,代码核 ...
- generic
是什么 算法实现时保有待定类型的参数. 为什么 一份代码用于多个算法(当算法中只数个类型不同的时候) 可重新性 很多常用算法和容器数据结构都可以type-generic的方式实现 why not 许多 ...
- 十二、sed文本处理
一.概述 1.sed 是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到 sed 的魅力!sed 通过输入读取文件内容,但一次仅读取一行内容进行某些 ...
- 用javascript修改html元素的class
document.getElementById("collins_contentWrp").className="content-wrp dict-container c ...