猿问

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

在codewars上尝试这个问题。


如果字符串中的字符按顺序出现,则该函数应返回 true。


例如:


solve("abc") = True,因为它包含 a,b,c


solve("abd") = False,因为 a、b、d 不连续。


solve("dabc) = True,因为它包含a、b、c、d


solve("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;

    }

  }

}

但是如您所见,我不知道如何与之前的角色进行比较。


拉莫斯之舞
浏览 197回答 1
1回答

收到一只叮咚

您的代码中存在一些问题。您没有比较 if 子句中的正确内容。你在比较同样的事情。您需要检查下一个字符代码索引是否大于您当前的索引。您会在第一个字符之后立即返回,因为您在不循环遍历值的情况下从顶部返回 true。确保在循环时注意,最大的问题是您只是一遍又一遍地直接比较相同的字符,因为您不再担心正在检查的字符的索引。如果下一个字符代码小于当前返回false,我基本上会在您的函数中说,否则返回true。这只会在遍历整个字符串后返回 true。function solve(s){&nbsp; s = s.trim().split("").sort().join(""); // remove white spaces, split to sort and then join again&nbsp; for (let i = 0; i < s.length - 1; i++) {&nbsp; &nbsp; if ((s.charCodeAt(i + 1) - s.charCodeAt(i)) !== 1) {&nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; }&nbsp; return true;}console.log(solve('abcdef')); //trueconsole.log(solve('afew')); //falseconsole.log(solve('defghijklmn')); //trueconsole.log(solve('lkjsadf')); //falseconsole.log(solve('123456')); //trueconsole.log(solve('123abc')); //trueconsole.log(solve('abc123')); //falseconsole.log(solve('abd')); //falseconsole.log(solve('abbc')); //falseconsole.log(solve('abc')); //trueconsole.log(solve('dabc')); // true
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答