为了账号安全,请及时绑定邮箱和手机立即绑定

检查字符串中字符的 ASCII 码值是否大于或小于前一个字符的 ASCII 码值

检查字符串中字符的 ASCII 码值是否大于或小于前一个字符的 ASCII 码值

拉莫斯之舞 2021-06-13 21:07:20
在codewars上尝试这个问题。如果字符串中的字符按顺序出现,则该函数应返回 true。例如:solve("abc") = True,因为它包含 a,b,csolve("abd") = False,因为 a、b、d 不连续。solve("dabc) = True,因为它包含a、b、c、dsolve("abbc") = False,因为 b 不会出现一次。解决(“v”)=真我的想法是检查字符串中的下一个字符的 ASCII 码值是否大于前一个字符的 ASCII 码值。如果是这种情况,则返回 true。否则,返回false。我有:function solve(s){  for (let i = 0; i < s.length; i++) {    let character = s[i];    //if character ASCII value is > than the ASCII value of character before it    if (character.charCodeAt(0) > /*previous character.charCodeAt(0));*/ ) {      return true    }    else {      return false;    }  }}但是如您所见,我不知道如何与之前的角色进行比较。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您的代码中存在一些问题。

  1. 您没有比较 if 子句中的正确内容。你在比较同样的事情。您需要检查下一个字符代码索引是否大于您当前的索引。

  2. 您会在第一个字符之后立即返回,因为您在不循环遍历值的情况下从顶部返回 true。

确保在循环时注意,最大的问题是您只是一遍又一遍地直接比较相同的字符,因为您不再担心正在检查的字符的索引。

如果下一个字符代码小于当前返回false,我基本上会在您的函数中说,否则返回true。这只会在遍历整个字符串后返回 true。

function solve(s){

  s = s.trim().split("").sort().join(""); // remove white spaces, split to sort and then join again

  for (let i = 0; i < s.length - 1; i++) {

    if ((s.charCodeAt(i + 1) - s.charCodeAt(i)) !== 1) {

      return false;

    }

  }

  return true;

}



console.log(solve('abcdef')); //true

console.log(solve('afew')); //false

console.log(solve('defghijklmn')); //true

console.log(solve('lkjsadf')); //false

console.log(solve('123456')); //true

console.log(solve('123abc')); //true

console.log(solve('abc123')); //false

console.log(solve('abd')); //false

console.log(solve('abbc')); //false

console.log(solve('abc')); //true

console.log(solve('dabc')); // true


查看完整回答
反对 回复 2021-06-18
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信