2010-08-24 66 views
1

我一直在试图将我的头围绕这一段时间,但一直未能拿出一个优雅的解决方案。在字符串中获得大多数字符的字符

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

干杯,Niko

回答

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,但我没有测试过)

+0

感谢您的回复!出于某种原因,我无法使用你的代码得到任何输出,也似乎无法找到问题,有什么可能是错误的? – nikoka 2010-08-24 10:34:37

+0

你忘了初始化它们。将charCounter [str.charAt(i)] + = 1;'更改为'if(charCounter.hasOwnProperty([str.charAt(i)]))charCounter [str.charAt(i)] ++; else charCounter [str .charAt(i)] = 1;'@nikoka – Amarghosh 2010-08-24 11:23:40

+0

+1为我提供了一个例子,并在我的“答案方法”中增加了更多细节 – hering 2010-08-24 11:34:05

0

据我所知,没有内置的支持。 但是,您可以使用String.charAt()迭代字符串,也可以将结果保存在数组中。 如果数组已经包含特定的字符,你可以增加一个数字或类似的东西。

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'); 
相关问题