获取字符串中出现次数最多的字符

时间:2010-08-24 09:37:48

标签: flash actionscript-3

我一直试图绕过这个问题一段时间,但一直没能找到一个优雅的解决方案。

问题:我有一个包含不同字符的字符串(“ABDDEEDDC”),我需要知道哪个字符最多。任何帮助将不胜感激。

干杯,Niko

3 个答案:

答案 0 :(得分:4)

我不知道它有任何内置支持,但您可以使用字符串的charAt()属性和关联数组来执行以下操作:

var charCounter:Object = new Object();
var str:String = "ABDDEEDDC";
var maxCount:int = 0;
var maxChar:String = "";

for(var i = 0; i < str.length; i++) {
    // Must make sure the associate array is initialised!
    if(charCounter.hasOwnProperty(str.charAt(i)) {
        charCounter[str.charAt(i)]++;
    } else {
        charCounter[str.charAt(i)] = 1;
    }
    if(charCounter[str.charAt(i)] > maxCount) {
        maxCount = charCounter[str.charAt(i)];
        maxChar = str.charAt(i);
    }
}

在结尾处,字符应该是maxChar,以及它在maxCount中出现的次数。

charAt()

Associative Arrays

(旁注:我相信charCounter.hasOwnProperty(str.charAt(i))而不是str.charAt(i) in charCounter,你可以使用{{1}},但我没有测试过它。)

答案 1 :(得分:0)

据我所知,没有内置支持。 但是您可以使用String.charAt()遍历字符串,并将结果保存在数组中。 如果数组已包含特定的字符,则可以增加数字或类似的数字。

答案 2 :(得分:0)

或者您可以将其拆分为数组,排序,然后只计算每个值

var str:String = "ABDDEEDDC";
var a:Array = str.split('');
a.sort();
var currChar:String = '';
var currCount:int = 0;
var maxChar:String = '';
var maxCount:int = 0;
for(var i:int=0; a[i]; i++){
    if(currChar == a[i]) {
        currCount++;
        if(currCount > maxCount){
            maxCount = currCount;
            maxChar = currChar;
        }
    } else {
        currChar = a[i];
        currCount = 1;
    }
}
trace(maxChar + ' occurs '+maxCount+' times');