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入门 - 语言基础 - 20.Stream和File和IO
原文地址:http://www.work100.net/training/java-stream-file-io.html 更多教程:光束云 - 免费课程 Stream和File和IO 序号 文内章节 ...
- GoldenGate DB11gr2配置手册
GoldenGate DB11gr2配置手册 源端数据库配置 1.1源端数据库打开Archive Log: SQL>shutdown immediate; SQL>startup moun ...
- [LOJ#3022][网络流]「CQOI2017」老 C 的方块
题目传送门 定义有特殊边相邻的格子颜色为黑,否则为白 可以看出,题目给出的限制条件的本质是如果两个小方块所在的格子 \(x\) 和 \(y\) 为两个相邻的黑格,那么 \(x\) 和 \(y\) 之间 ...
- CF6B President's Office 题解
看到大致思路一致的题解,决定发一篇运用STL不用dfs的题解 好久不发题解,心里不爽 思路: 1.输入的同时找到总统桌子的位置,用vector<pair <int,int> ...
- UidGenerator springboot2集成篇
uid-generator 官网集成文档: https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md 由于并没有提供spri ...
- RabbitMQ入门(三)订阅模式
在之前的文章RabbitMQ入门(二)工作队列中,我们创建了一个工作队列.工作队列背后的假设是每一项任务都被准确地传送至一个worker.在本文中,我们将会做一些不同的事情--我们将会把一个消息发 ...
- 用postman导出excel文件
原文地址:https://jingyan.baidu.com/article/915fc414559b4351394b2084.html 现在的web和移动开发,常常会调用服务器提供restful接口 ...
- CSS-15-定位
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CSS-13-块级元素和行内元素
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CSS-07-CSS文本设置
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...