2010-08-24 4 views
1

저는이 문제에 대해 많은 시간을 할애했지만 우아한 해결책을 제시하지 못했습니다.문자열에 대부분의 문자가있는 문자 가져 오기

문제 : 다른 문자 ("ABDDEEDDC")가있는 문자열이 있는데 어떤 문자가 가장 많이 발생하는지 알아야합니다. 어떤 도움이라도 대단히 감사하겠습니다.

내가 아는 건배, 니코

답변

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

+0

초기화하는 것을 잊었습니다. charCounter [str.charAt (i)] ++; 그렇지 않으면 charCounter [str (char)] (char) [str.charAt (i)] + .charAt (i)] = 1; @nikoka – Amarghosh

+0

예를 제공하고 내 "답변 접근"에 대한 자세한 내용을 추가하는 경우 +1 – hering

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'); 
관련 문제