簡體   English   中英

檢查字符串中字符的ASCII碼值是否大於或小於前一個字符的ASCII碼值-JavaScript

[英]Check if ASCII Code Value Of Character In String Is Greater Than or Less Than ASCII Code Value of Previous Character - JavaScript

Codewars上嘗試此問題。

如果字符串中的字符按順序出現,則函數應返回true。

例如:

resolve(“ abc”)= True,因為它包含a,b,c

resolve(“ abd”)= False,因為a,b,d不連續。

resolve(“ dabc)= True,因為它包含a,b,c,d

resolve(“ abbc”)= False,因為b不會出現一次。

resolve(“ v”)= True

我的想法是檢查字符串中的下一個字符是否具有大於上一個字符的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. 您沒有在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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM