2011-12-11 3 views
1

저는 문자열을 입력으로 사용합니다. 테스터. 문자열의 각 알파벳 수를 찾고 싶습니다. 나는 HashMap을 사용해 보았습니다. 하지만 배열을 사용하여 구현하고 싶습니다. 몇 가지 방법을 제안 해주세요.배열을 사용하여 각 알파벳 수를 계산합니다.

+0

각 알파벳? 각 편지? – talnicolas

+1

다른 콜렉션 대신 배열을 사용하려는 이유 f/w ??? 질문을 올바르게 설명하십시오. – buch11

답변

1

지도를 사용하면 글자가 키이고 값은 개수가 더 쉽습니다. 배열을 사용하는 것은 더 까다 롭습니다. 각 문자에 숫자를 할당하고 해당 숫자를 배열의 인덱스로 사용하고 배열에 개수를 저장할 수 있습니다. 따라서 'A'는 1, 'B'는 2 등입니다. 알고리즘은

  1. 다음 문자열을 가져옵니다.
  2. 문자의 색인을 가져옵니다.
  3. 증가 물론 1

에 의해 배열의 해당 인덱스의 값은 널 검사 및 무엇이든을 할 필요가있다.

사실 논리적으로 맵입니다. 지도를 사용할 때 위의 2 단계를 수행합니다.

1
ArrayList<Character> ch = new ArrayList<Character>(); 
ArrayList<Integer> count = new ArrayList<Integer>(); 

someMethod(String input) { 
    for(char c : input.toCharArray()) { 
    if(ch.indexOf(c) != -1) { 
     i.set(ch.indexOf(c), i.get(ch.indexOf(c))+1); 
    } else { 
     ch.add(c); 
     i.add(1); 
    } 
    } 
} 
1

당신은 Multiset iunterface를 구현하는 컬렉션을, 즉 HashMultiset (구글 구아바 라이브러리에서 가져온 두)를 사용합니다. Multiset은 컬렉션 개체의 수를 유지하도록 설계되었습니다

Multiset<String> m = HashMultiset.create(Arrays.asList("a", "a", "b", "c", "b", "a")); 
// m.toString() prints "a x 3, b x 2, c x 1" 
// m.count() gives 6 
2
당신은 문자 번호 값을 할당 ASCII를 사용할 수 있습니다

: enter image description here

int[] letters = new int[128]; // There are 128 different possible characters. 

for(int i = 0; i < input.length; i++) { 
    char current = input.charAt(i); 
    int index = Character.getNumericValue(char); 
    letters[index]++; 
} 
1

하나, 당신이 먼저 배열을 만들 수있는 방법 charAt (index) 메서드를 사용하여 문자열을 통과하고 현재 char을 배열의 문자열과 비교합니다. 일치하는 항목이 있으면 값을 증가 시키거나 배열의 새 항목으로 추가합니다.

관련 문제