簡體   English   中英

查找字符串中出現頻率最高的字符 javascript

[英]Finding the most frequent character in a string javascript

假設我有以下字符串“35538​​5”。 我需要一個簡單的 JavaScript,它可以告訴我提到最多的字符是 5。提前謝謝你。

我試過這個,但沒有結果。

var exp = '355385' ;

var exps =exp.split("");

var expCounts = { };

for (var i=0;i<exp.length;i++)

{expCounts["_" + exps[i]] = (expCounts["_" + exps[i]] || 0) + 1 ;

if (expCounts==3) exps=exps[i]; }; exps;

這將遍歷字符串中的每個字符並跟蹤每個字符的計數和具有最大計數的字符:

var exp = '3553853335' ;
var expCounts = {};
var maxKey = '';
for(var i = 0; i < exp.length; i++)
{
    var key = exp[i];
    if(!expCounts[key]){
     expCounts[key] = 0;
    }
    expCounts[key]++;
    if(maxKey == '' || expCounts[key] > expCounts[maxKey]){
        maxKey = key;
    }
}

console.debug(maxKey + ":" + expCounts[maxKey]);

更新:這是一個 ES6 版本,它將處理多個字符具有相同最大計數的字符串

function maxCount(input) {
    const {max, ...counts} = (input || "").split("").reduce(
    (a, c) => {
        a[c] = a[c] ? a[c] + 1 : 1;
        a.max = a.max < a[c] ? a[c] : a.max;
        return a;
    },
    { max: 0 }
    );

    return Object.entries(counts).filter(([k, v]) => v === max);
}

示例(請原諒粗輸出):

maxCount('--aaaa1111--').join(' | ').replace(/,/g, ':');

輸出1:4 | -:4 | a:4 1:4 | -:4 | a:4

var getMax = function (str) {
 var max = 0,
     maxChar = '';
  str.split('').forEach(function(char){
    if(str.split(char).length > max) {
        max = str.split(char).length;
        maxChar = char;
     }
  });
  return maxChar;
};

日志

getMax('355385') //5;

getMax('35538533') //3;

在同等情況下,它將返回第一個數字

getMax('3553') //3;
var string  = "355385",
    counter = {};

for (var i = 0, len = string.length; i < len; i += 1) {
    counter[string[i]] = (counter[string[i]] || 0) + 1;
}

var biggest = -1, number;
for (var key in counter) {
    if (counter[key] > biggest) {
        biggest = counter[key];
        number = key;
    }
}

console.log(number);
# 5
var exp = '355385';
var findMostFrequent = function (string) {
    var chars = {}, first = string.charAt(0);
    chars[first] = 1;
    var maxChar = first, maxCount = 1;

    for (var i = 1; i < string.length; i++) {
        var char = string.charAt(i);
        if (chars[char]) {
            chars[char]++;
        } else {
            chars[char] = 1;
        }
        if (chars[char] > maxCount) {
            maxChar = char;
        }
    }
    return maxChar;
};

另一種解決方案

function maxChar(str) {

        const charMap = {};
        let max = 0;
        let maxChar = '';

        for(let char of str){
            if(charMap[char]){
                charMap[char]++;
            }else{
                charMap[char] = 1;
            }
        }

        for(let char in charMap){
            if(charMap[char] > max){
                max = charMap[char];
                maxChar = char;
            }
        }

        return maxChar; 
}

結果:

 maxChar('355385') 
  "5"

另一種獲取字符串中出現頻率最高的字符的方法 - 將頻率映射排序到一個數組中,然后從該數組中返回第一個(最大)值:

function highest (string) {
  let array = Array.from(string);
  let frequencyMap = {};
  array.forEach((value, index) => {
    if (!frequencyMap[value]) {
      frequencyMap[value] = 0;
    }
    frequencyMap[value] += 1;
  })
  let frequencyArray = Object.entries(frequencyMap);
  frequencyArray.sort((a, b) => {
    if (a[1] < b[1]) {
      return 1;
      }
    if (a[1] > b[1]) {
      return -1;
      }
      return 0;
    });
  return(frequencyArray[0][0]);
}

console.log(highest("hello World"));

返回“l”

這是這個問題的另一個答案:

為此,我認為角色可以是任何類型的,除了空格

function findHighestFreqInString(str) {
    if (!str) return null
    let cleanedStr = str.replace(/\s/g, '') //assumes no spaces needed
    if (cleanedStr.length === 0) return null
    let strObj = {}
    let topChar = ''
    for (let val of cleanedStr) {
        strObj[val] = (strObj[val] || 0) + 1
        if (topChar === '' || strObj[val] >= strObj[topChar]) topChar = val
    }
    return topChar
}

以下是您將如何使用它:

findHighestFreqInString('my name is Someone') // returns: e
findHighestFreqInString('') // returns: Null
findHighestFreqInString('    ') // returns: Null

這是:

let str = '355385';
function mostFrequentCharacter(str) {
        let charactersArr = str.split(''),
            bins = {};

        charactersArr.map(el => bins[el] = (bins[el] || 0) + 1); 
    return Object.keys(bins).map(key => ({
            name: key,
          count: bins[key]
    })).sort((a, b) => b.count - a.count)[0];
}

您可以使用以下解決方案來查找字符串中出現頻率最高的字符:

function getMostRepeatedCharacter(string) {
    return string.split('').reduce((acc,char)=>{
        let len = string.split(char).length - 1;
        return len > acc[1] ? [char,len] : acc
    },['',0])[0]
}

getMostRepeatedCharacter('wediuaududddd') // d

想分享這個 ES6 函數式方法。 請提供您的意見。

function maxChar(myStr) {
  let charObj = {};
  return [...myStr].reduce((_, char) => {
    if (char in charObj) charObj[char]++;
    else if (char !== " ") charObj[char] = 1;
    return Object.keys(charObj).reduce((a, b) => {
      return charObj[a] > charObj[b] ? a : b;
    });
  });
}

上面的答案都沒有考慮到 JavaScript 在內部使用 UTF-16

 const s = "😄😅😄😄😅😅😄😄😱😱😄"; function getMostFrequentChar(s) { const len = s.length; const freq = {}; let maxFreq = 0; let maxChar; for (let i = 0; i < len; ++i) { const isPair = (s.charCodeAt(i) & 0xF800) == 0xD800; const c = isPair ? s.substr(i++, 2) : s[i]; const f = (freq[c] || 0) + 1; freq[c] = f; if (f > maxFreq) { maxFreq = f; maxChar = c; } } return {maxFreq, maxChar, freq} } console.log(getMostFrequentChar(s));

注意:上面的代碼假設字符串是有效的 UTF-16。 可以構造一個無效的 UTF-16 字符串,在這種情況下,您可以將isPair更改為

const isPair = len - i > 1 &&
               s.charCodeAt(i    ) & 0xF800) == 0xD800 &&
               s.charCodeAt(i + 1) & 0xF800) == 0xD800;

但不清楚具有無效 UTF-16 值的字符意味着什么。

它也不會處理更時髦的 unicode

s = "👦🏿👦👦🏿👦👦🏻👦🏽👦🏾👦🏿"

有許多圖形模因采用多個 unicode 代碼點

此外,如果字符串很長,使用split拆分字符串是 SSSSSSLLLLLOOOOWWWW 和巨大的內存豬。

這是另一種(奇怪的)方式它用空白替換當前字符以檢查字符串中存在多少次,從而使長度與原始模式不同

var str = "355385";
var mostLength = 0;
var characterMostLength;
for(t = 0; t< 10; t++)
{
    var res = str.length - str.replace(new RegExp(t, "g"), "").length;
    if (res > mostLength){
        characterMostLength = t;
        mostLength = res;
    }
}
function solution(N) {
    var textToArr = N.split('');
    var newObj = {};
    var newArr = [];

    textToArr.map((letter) => {
        if(letter in newObj){
            newObj[letter] = newObj[letter]+1;
        } else {
            if(letter !== ' '){
               newObj = Object.assign(newObj, {[letter]: 1})
            }
        }
    });

    for(let i in newObj){
        newArr.push({name: i, value: newObj[i]})
    }

    var res = newArr.sort((a,b) => b.value-a.value)[0];
    return res.name+':'+res.value
}

solution("hello world");

這是一個簡單的想法,只包含一個帶有哈希圖的傳遞。 唯一不會做的就是處理幾個最大數字。 我真的希望你喜歡我的解決方案:)。

function maxChar(str) {
    //Create the output and the hashmap
    let m = {}, ans

    //Loop through the str for each character
    //Use reduce array helper because of the accumulator

    str.split('').reduce((a, c) => {

        //Increments Map at location c(character) unless it does not already exist

        m[c] = m[c] + 1|| 1

        //This checks to see if the current passthrough of m[c] is greater than or equal to the accumulator, if it is, set the answer equal to the current character. If it's not keep the ans the same.

        ans = m[c] >= a ? c : ans

        //Only increment the accumulator if Map at location c(character) is greater than the accumulator. Make sure to return it otherwise it won't increment.

        return a = m[c] > a ? a + 1 : a
    }, 1)

    //Lastly return the answer
    return ans
}

查找字符串中出現的最大字符數的最簡單方法

var arr = "5255522322";
    var freq:any = {};
    var num;
    for(let i=0;i<arr.length;i++) {
      num = arr[i];
    freq[num] = freq[num] >= 1 ? freq[num] + 1 : 1;
    }
    var sortable:any = [];
    for(let i in freq)
    {
      sortable.push(i);   
    }
    var max = freq[sortable[0]];
     var data:any = "";
   var value = sortable[0];
    for(let i=0;i<sortable.length;i++) {

      if(max > freq[sortable[i]]){
        data = "key" + value + " " + "value" + max;
      }else{
        value = sortable[i]
        max = freq[sortable[i]];
      }
    }

    console.log(data);

 function maxChara(string) { charMap = {}; maxNum = 0; maxChar = ""; string.toString().split("").forEach(item => { if (charMap[item]) { charMap[item]++; } else { charMap[item] = 1; } }); for (let char in charMap) { if (charMap[char] > maxNum) { maxNum = charMap[char]; maxChar = char; } } return maxChar; } let result = maxChara(355385); console.log(result);

這里str將是需要驗證的字符串。

function maxCharacter(str){

let str1 = str; let reptCharsCount=0; let ele='';let maxCount=0;
let charArr = str1.split('');
for(let i=0; i< str1.length; i++){
    reptCharsCount=0;
    for(let j=0; j< str1.length; j++){
        if(str1[i] === str1[j]) {
            reptCharsCount++;
        }
    }

    if(reptCharsCount > maxCount) {
        ele = str1[i];
        maxCount = reptCharsCount; 
    }
}
return ele;

}

輸入

maxCharacter('asdefdfdsdfseddsssdfsdnknmwlqweeeeeeeesssssssssssseeee');

輸出

“s”

function freq(str) {
        var freqObj = {};
        str.forEach((item) => {
            if (freqObj[item]) {
                freqObj[item]++;
            }
            else {
                freqObj[item] = 1;
            }

        });
        return freqObj;


    }
    function findmaxstr(str) {
        let max = 0,res,freqObj;
        freqObj = freq(str.split(""));
        for(let keys in freqObj){
            if (freqObj[keys] > max) {
                max = freqObj[keys];
                res = keys;
            }
        }
        console.log(res);
        return res;
    }



findmaxstr("javasdasdsssssscript");

 const maxChar = (str) => { let obj = {}; for (let char of str) { (!obj[char]) ? obj[char] = 1: obj[char]++; } maxCharcount = Math.max(...Object.values(obj)); const key = Object.keys(obj).filter(key => obj[key] === maxCharcount); console.log(`Most repeated character/characters in the given string "${str}" is/are given below which repeated ${maxCharcount} times`); console.log(...key); } maxChar("355385");

這是代碼,它還會檢查具有相同最大計數的小寫和大寫字符,並返回一個低位 ASCII 字符作為最大值。

function mostFrequent(text) {
    let charObj={}
    
    for(let char of text){
        if(char!==' '){
            if(charObj.hasOwnProperty(char)) charObj[char]=charObj[char]+1;
                else charObj[char]= 1
        }
    } 
    
    let maxOccurance= Object.keys(charObj)[0], i=0;
    
    for(let property in charObj){
        if(i>0){
            if(charObj[property]> charObj[maxOccurance]) 
                maxOccurance= property
            else if(charObj[property]=== charObj[maxOccurance]) 
            {
                if(property<maxOccurance) 
                    maxOccurance=property 
                }
            } 
            i++
    }
    
    return [maxOccurance, charObj[maxOccurance]]
}
let str = '355385';
let max = 0;
let char = '';
str.split('').forEach((item) => {
  let current = str.split(item).length;
  if (current > max) {
    max = current;
    char = item;
  }
});

console.log(char + ' occurred ' + (max - 1) + ' times');

 var exp = '35585' ; var expCounts = { }; let maxChar = '' let count = 0 for(let i = 0; i < exp.length; i++){ let char = exp[i] expCounts[char] = expCounts[char] + 1 || 1 if(expCounts[char] > count){ maxChar = char count = expCounts[char] } console.log(maxChar) }

最簡單的方法是這樣的:

function maxChar(str) {
  const charMap = {};
  let max = 0;
  let maxChar = '';

首先創建一個單詞對象以及它們重復的次數,為此我們必須使用for of循環遍歷字符串並實現條件:

  for (let char of str) {
    if (charMap[char]) {
      charMap[char]++;
    } else {
      charMap[char] = 1;
    }
  }

現在使用for in循環遍歷對象

  for (let char in charMap) {
    if (charMap[char] > max) {
      max = charMap[char];
      maxChar = char;
    }
  }

  return maxChar;
}
function checkNoofOccurenance(string) {
  const arr = [...new Set(string.split(''))].sort();
  const finalObj = {};
  arr.forEach((item) => {
    finalObj[item] = string.split(item).length - 1;
  });
  const item=Object.keys(finalObj).reduce((occ, toBeComapir)=>finalObj[occ]>finalObj[toBeComapir]?occ:toBeComapir)
  return item;
}

使用 Hasmaps,我們可以在 O(N) 時間復雜度內找到最常見的字符和出現次數。 下面是代碼。 我已經使用了一個 hasmap 來保存所有值,並且在執行此操作時,我還在計算最大出現次數和最大字符。

 var mostFreq = function(s) { let myMap = new Map(); let temp; let counter = 0; let mostFrequentChar; for(let i =0;i <s.length;i++){ if(myMap.has(s.charAt(i))){ temp = myMap.get(s.charAt(i)); temp = temp + 1; myMap.delete(s.charAt(i)); myMap.set(s.charAt(i) , temp) if(temp > counter){ counter = temp; mostFrequentChar = s.charAt(i); } }else{ myMap.set(s.charAt(i), 1) } } //if you want number of occerance of most frequent char = counter //if you want list of each individual char and its occurrence = myMap //if you just want the char that is most frequence = mostFrequentChar; return mostFrequentChar; };

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>

    <p id = "myString">Hello World! I am Julio!</p>

    <p id = "mRCharacter"></p>

    <script>
        var string = document.getElementById("myString").innerHTML;

        var mRCharater = mostRepetedCharacter(string);
        document.getElementById("mRCharacter").innerHTML = mRCharater;
        console.log(mRCharater);

        function mostRepetedCharacter(string){
            var mRCharater = "";
            var strLength = string.length;
            var i = 0;
            var count = 0;
            var max = 0;
            var rest = strLength - 1;
            while (i < strLength){
                var j = i + 1;
                while (j <= rest){
                    if (string[i] === string[j]){
                        count++;
                    }
                    if (count > max){
                        max = count;
                        mRCharater = string[i];
                    }
                    j++;
                }
                i++;
                count = 0;
            }
            return mRCharater;
        }

    </script>

</body>
</html>

    enter code here

暫無
暫無

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

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