2010-08-24 65 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'); 
相關問題