在解决来自 coderbyte 的 JavaScript 编码挑战时遇到麻烦
Having trouble solving this JavaScript coding challenge from coderbyte
我正在尝试从 coderbyte.com 解决以下问题:
使用 JavaScript 语言,让函数 SimpleSymbols(str( 获取正在传递的 str 参数,并通过返回字符串 true 或 false 来确定它是否是可接受的序列。str 参数将由 + 和 = 符号组成,它们之间有几个字母(即 ++d+===+c++==a(,要使字符串为真,每个字母必须用 + 符号包围。所以左边的字符串是假的。字符串不会为空,并且至少包含一个字母。
以下是我的尝试:
function SimpleSymbols(str) {
// code goes here
var abc = 'abcdefghijklmnopqrstuvwxyz';
for (var i = 0; i < str.length; i++) {
if (abc.indexOf(str[i]) !== -1) {
if (str[i-1] + str[i+1] === "++") {
return true;
}
else {
return false;
}
}
}
}
这适用于以下情况:
SimpleSymbols("+a+d+"); // true
SimpleSymbols("+ab+d+"); // false
SimpleSymbols("b+d+"); // false
我发现唯一没有提供正确答案的情况是当有一个尾随字母时,例如:
SimpleSymbols("+a+b"); // true
这返回 true,而实际上它应该返回 false。
注意:我假设字符串将是小写的...我还没有处理区分大小写的问题,但我想让小写版本正常工作,然后我会让它与大小写无关。
关于我的代码有什么问题的任何想法?
我将其解释为:没有字母的前面/后面没有加号以外的字符(包括无(:
function SimpleSymbols(str) {
return !/^[a-z]|[^+][a-z]|[a-z][^+]|[a-z]$/i.test(str)
}
您可以使用正则表达式:
function SimpleSymbols(str) {
if (/^[a-zA-Z]/.test(str) || /[a-zA-Z]$/.test(str)) {
return false;
}
else if (/[^+][a-zA-Z]/.test(str) || /[a-zA-Z][^+]/.test(str)) {
return false;
}
else {
return true;
}
}
或
function SimpleSymbols(str) {
var arr = str.toLowerCase().split("");
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= "a" && arr[i] <= "z") {
if (i === 0 || i === arr.length) {
return false;
}
if (arr[i-1] !== "+" || arr[i+1] !== "+") {
return false;
}
}
}
return true;
}
这将在第一个被 + 符号包围的成功字母上返回"true",它不会继续检查到最后。
我还想知道字符串索引是否会越界[i-1]
,[i+1]
在第一个/最后一个字符上?似乎没有,但我找不到语言参考。
更好:
function SimpleSymbols(str) {
var abc = 'abcdefghijklmnopqrstuvwxyz';
for (var i = 0; i < str.length; i++) {
if (abc.indexOf(str[i]) !== -1) {
if (str[i-1] + str[i+1] != "++") {
return false;
}
}
}
return true;
}
可能还可以进行性能改进(通过 AND 而不是通过字符串添加来检查边界字符(,您也可以通过正则表达式来完成。
通过正则表达式:
if (str.search( /[^+][a-z]/) >= 0) // will match letters with no + beforehand.
return false;
if (str.search( /[a-z][^+]/) >= 0) // will match letters with no + afterward.
return false;
return true;
我相信这是一个完美的正则表达式案例检查此处解释的正则表达式^[^a-z]*('++[a-z]'++[a-z]?)*[^a-z]*$
在javascript中使用它,如下所示:
function SimpleSymbols(str) {
return !/^[^a-z]*('++[a-z]'++[a-z]?)*[^a-z]*$/i.test(str);
}
export const simpleSymbols = (str) => {
const arr = str.split('')
let k = []
arr.forEach(element => {
if((/[a-zA-Z]/).test(element)){
if(arr[arr.indexOf(element)-1]==="+" && arr[arr.indexOf(element)+1]==="+"){
k.push(1)
}else{
k.push(0)
}
}
});
if(k.includes(0)){
return false
}else{
return true
}
}
相关文章:
- 将地理编码结果转换为php变量以发布到mysql数据库
- Json在完整日历中对数据进行了编码
- 如何对每个用户每天只允许单击一次的按钮进行编码
- Javascript字符集编码
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- base64编码的图像比intranet中的常规图像好吗
- 我不知道我的编码有什么问题.(JavaScript)
- 为什么字符编码对URL很重要
- 如何在做PHP时在base64中动态编码;preg_ replace”;
- 如何将JSON编码的PHP数组发送到同一页面上的数据表
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 以HTML文件中的编码形式脱机存储图像
- 从Base64 Ionic编码和解码图像
- 错误编码的Adsense广告正在扼杀我的网站's的性能
- JSon挑战:如何在JqxGrid中检索JSon编码的值
- 编码挑战 - 员工调度
- 在解决来自 coderbyte 的 JavaScript 编码挑战时遇到麻烦
- 从数组中减法,编码挑战
- 编码挑战”;ArithGeoII”;为什么不是't函数工作