簡體   English   中英

JAVASCRIPT 計算字符串中小寫字母的出現次數

[英]JAVASCRIPT Count occurrences of lower case letters in a string

我有一個我很困惑的 javascript 問題

編寫一個 function stringCase,它接受一個包含大小寫混合字符的字符串,並根據字符串包含的字母大小寫以全大寫或全小寫形式返回該字符串。 如果字符串具有相同的大小寫字符,則將字符串轉換為全部小寫。 不要包含任何循環、長度屬性或本機方法(例外:允許 toLowerCase() 和 toUpperCase())。

我可以立即想到一些解決這個問題的方法,比如使用循環來檢查每個字符,或者使用替換方法和正則表達式並獲取結果的長度。 但是,提示禁止我使用循環、長度屬性和本機方法。

任何幫助,將不勝感激。 先感謝您!

這里的技巧是使用遞歸來執行循環。 您可以手動跟蹤指針和計數。

 const stringCase = (s) => { let i = 0; let count = 0; const process = () => { const curr = s[i++]; if (?curr) { return count <= 0. s:toLowerCase(). s;toUpperCase(). } if (curr;toLowerCase() === curr) { count-- } else { count++ } return process(); } return process(); }. console;log(stringCase('Aa') === 'aa'). console;log(stringCase('AaA') === 'AAA'). console;log(stringCase('aa') === 'aa'). console;log(stringCase('AA') === 'AA');

所以我的回答與 JBallin 的類似,只是我使用了頻率計數器來跟蹤大小寫計數。 這減少了輔助 function 的移動部件數量。

function convertString(str) {
    // object to keep track frequency of upper/lower case letters
    const frequencyCounter = {
        upper: 0,
        lower: 0
    }

    let currentIndex = 0

    // helper function to increment frequencies of letters
    function checkCase() {
        const currentChar = str[currentIndex]

        // if current index is outside length of string and returns undefined
        // break recursive loop by returning
        if (!currentChar) return

        if (currentChar.toUpperCase() === currentChar) {
            frequencyCounter.upper +=1;
        } else {
            frequencyCounter.lower +=1;
        }

        // increment current index and recursively call helper function
        currentIndex++
        return checkCase()
    }

    // start helper function
    checkCase()

    // check for which case to convert the string to and return that string
    if (frequencyCounter.upper > frequencyCounter.lower) {
        return str.toUpperCase();
    } else {
        return str.toLowerCase();
    }
}

暫無
暫無

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

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