[英]What's the most efficient way to evaluate if a string is a palindrome using Javascript?
[英]What is the most efficient way to go through string's chars in Javascript?
我看到在SO上也有類似的問題,但沒有找到一個符合我特定目標的問題。
我開發了一個小功能,它可以循環通過一個字符串(假設在10到160個字符之間)來提取
要解析的字符串示例:“ word1 word2 $ 1 word3 $ 2 word4 $ 3”。
輸出示例:
{
strings: [word1 word2, word3, word4],
specialChars: 3
}
當然,也存在極限情況(無通配符,僅1個通配符,通配符可以位於字符串的開頭或結尾)。
到目前為止,我編寫的算法如下(有一些問題需要解決,但在這個問題上,我對效率的關注比對結果的興趣更大):
function parsestr(str: string) {
let specialChars = [],
plaintextParts = [],
resultObject = {
strings: [],
specialChars: 0
};
// convert to char array and loop
str.split('').forEach(function(c, i){
if (c=='$') specialChars.push(i);
});
resultObject.specialChars = specialChars.length;
// extract plain text parts
if (specialChars.length == 0) return resultObject;
// part before first wildcard
if (specialChars[0]>0) plaintextParts.push(str.substr(0, specialChars[0]-1));
// 2..N
for (var i=1; i<specialChars.length-1; i++) {
plaintextParts.push(str.substr(specialChars[i-1]+2, specialChars[i]-1));
}
// last part
if (specialChars[specialChars.length-1]+1 < str.length-1)
plaintextParts.push(str.substr(specialChars[specialChars.length-2]+2, specialChars[specialChars.length-1]-1));
resultObject.strings = plaintextParts;
return resultObject;
}
// call function and print output
var jsonString = "word1 word2 $1 word3 $2 word4 $3";
console.log(JSON.stringify(parseJsonString(jsonString)));
您可以只使用正則表達式:
let str = "word1 word2 $1 word3 $2 word4 $3";
let regex = /\$[0-9]/;
let strSplit = str.split(regex);
console.log(JSON.stringify(strSplit)); // ["word1 word2 ", " word3 ", " word4 ", ""]
如果您不希望最后一個空字符串,可以隨時將其關閉。
因此,如果您想要“特殊字符”的數量,則可以只取結果strSplit
的長度,然后減去一個。
在效率方面,這似乎是微優化,尤其是對於不超過160個字符的字符串。 使代碼以一種清晰易懂的方式工作比優化每個操作的效率更為重要。
在優化代碼時,請嘗試使通用解決方案更有效,然后在以后優化細節。 假設此功能不是憑空存在的,請在優化諸如字符串操作之類的內容之前,着重研究應用本身的性能並找出實際性能瓶頸在哪里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.