Coderbyte Challenge 7
有人可以帮忙吗?下面的函数应该检查字符串中的字母是否有' +'并且当一封信没有被+限制时,双方都返回true,并且返回false。但是当我通过下面的字符串时,它传递的是真的,当它应该是假的时候,因为k在右边没有+。提前谢谢。
str = '+f+++l+k=+'
alpha = 'abcdefghijklmnopqrstuvwxyz'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (alpha.indexOf(str.charAt(i)) > 0 && i === 0) {
return false
}
else if (alpha.indexOf(str.charAt(str.length -1)) > 0) {
return false
}
else if (alpha.indexOf(str.charAt(i)) > 0 &&
(str.charAt(i-1) !== '+' || str.charAt(i+1) != '+')) {
return false
}
else {return true}
}
}
答案 0 :(得分:5)
每次第一次迭代时,您的函数都会中断for
循环。您只需要打破false
分支上的循环。然后只需在for循环后返回true
(意味着它不会以false
退出,直到该行。
答案 1 :(得分:1)
作为替代解决方案:
你可以利用这个逻辑:
计算两边都有+
的字母数和字母数。如果他们都相等,请返回true
其他false
function SimpleSymbols(str) {
return str.match(/[a-z]/gi).length == str.match(/\+[a-z]\+/g).length
}
答案 2 :(得分:0)
这个简单的逻辑怎么样
str = '+f+++l+k++'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (str[i] === '+') {
continue;
}
if (i === 0 || i === str.length - 1) {
return false;
}
if (str[i - 1] === '+' && str[i].match(/[a-z]/) && str[i + 1] === '+') {
i += 1;
continue;
} else {return false;}
}
return true;
}
答案 3 :(得分:0)
如果我们开始讨论替代方案虽然Regex
解决方案要短得多,但string.split
的版本更具可读性:
function SimpleSymbols(str){
if(str.length === 0) return false;
if(str[0] !== '+' || str[str.length-1] !== '+') return false;
var subs = str.split('+');
for(var i =0; i < subs.length; i++){
if(subs.length > 1) return false;
}
return true;
}