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

时间:2019-06-03 13:37:53

标签: javascript if-statement 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不会出现一次。

     

solve(“ 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 个答案:

答案 0 :(得分:2)

您的代码中有一些问题。

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

  2. 您将在第一个字符之后立即返回,因为从顶部返回true而不循环遍历这些值。

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

我基本上会在您的函数中说,如果下一个char代码小于当前字符,则返回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