Codewars-Javascript训练手册:字符串(上)
Recursive reverse string(递归反转字符串)
Description:
Your objective is to complete a recursive function reverse() that receives str as String and returns the same string in reverse order
Rules:
- reverse function should be executed only N times. N = length of the input string
- helper functions are not allowed
- changing the signature of the function is not allowed
stackoverflow解决方案:
function reverse (str) {
if (str === "") {
return "";
} else {
return reverse(str.substr(1)) + str.charAt(0);
}
}
可改写为:return str=="" ? "":reverse(str.substr(1)) + str.charAt(0)
,substr()
方法可在字符串中抽取从 start 下标开始的指定数目的字符。语法:
stringObject.substr(start,length)
ECMAscript 没有对该方法进行标准化,因此反对使用它。 slice()
可以代替substr()
.charAt()
方法可返回指定位置的字符,注释:字符串中第一个字符的下标是 0。如果参数 index
不在 0 与 string.length
之间,该方法将返回一个空字符串。可以使用str[0]
方法代理
Codewars解决方案:
function reverse(str) {
return str.length == 1 ? str : reverse(str.substr(1)) + str[0];
}
slice()
方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。语法:
stringObject.slice(start,end)
字符串去重
Description:
Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
Solution:
var uniqueInOrder=function(iterable){
var t = [],
tt='';
for(var i=0,len=iterable.length;i<len;i++){
if(tt!==iterable[i]){t.push(iterable[i])};
tt=iterable[i];
}
return t;
}
Dubstep
Description:
a song with words “I AM X” can transform into a dubstep remix as “WUBWUBIWUBAMWUBWUBX” and cannot transform into “WUBWUBIAMWUBX”.
Output
Return the words of the initial song that Polycarpus used to make a dubsteb remix. Separate the words with a space.
Solution:
function songDecoder(song){
var rs = [];//使用数组进行push操作
for(var i=0,len=song.length;i<len;){
if(len>=3+i && song.substr(i,3)=="WUB"){
if(rs[rs.length-1]!=" ")//去除多个“WUB”造成的空格
rs.push(" ");//替换“WUB”为空格
i+=3;
}else{
rs.push(song[i]);
i++;
}
}
var str = rs.join('');//返回一个字符串
return str.replace(/(^\s*)|(\s*$)/g, "");//使用正则表达式来去除首尾的空格
}
Codewars上的解决方案:
//方案一
function songDecoder(song){
return song.replace(/(WUB)+/g," ").trim()
}
//方案二
function songDecoder(song){
return song.split("WUB").filter(function(v){return v!==""}).join(" ");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现