2017-02-07 9 views
1

나는 문자의 문자열을 가져 와서 문자열의 각 문자의 양을 인쇄하는 함수를 만들려고합니다. 예를 들어 : 입력 : 문자열 = "aaabbaccxyxyx" 출력 : 반복 4a4a4a2b2b4a2c2c3x2y3x2y3x 많은 : 내가 가지고 올 한 것을 4a2b2c3x2y가자바, 반복하지 않고 문자열의 문자의 양을 찾는 방법

이것은 :이 출력

public class Q1 { 
    public static String numLetters(String s){ 
     String end = new String(); 
     int counter = 0; 
     char c,d; 
     for(int i=0; i<s.length();i++){ 
      c = s.charAt(i); 
      for(int j=0; j<s.length();j++){ 
       d = s.charAt(j); 
       if(c == d){ 
        counter++; 
       } 
      } 
      end = end + counter+c; 
      counter = 0; 
     } 

     return end; 
    } 

에 불과하다 ..

어떻게 도와 줄 수 있습니까? 이 함수는 문자열을 반환해야하며 출력하지 않습니다. 감사합니다. =)

+1

가능한 복제 [문자열의 문자의 빈도를 계산하는 방법?] (http://stackoverflow.com/questions/6712587/how-to-count-frequency-of-characters-in-a- 문자열) –

+0

그것은 중복이 아니며 함수는 단지 문자열을 반환해야합니다. –

답변

1

내가 문자열에서 각 문자의 수를 유지하기 위해 int 배열을 만들 것입니다. 26 글자가 있기 때문에, 배열의 length26해야한다 : 당신이 당신의 원래 구조를 유지하려면, 나는를 사용하는 것이 좋습니다

public static String countChars(String arg) { 
    String res = ""; 
    boolean[] counted = new boolean[arg.length()]; 
    for (int i = 0; i < counted.length; i++) { 
     if (!counted[i]) { 
      char c = arg.charAt(i); 
      int counter = 1; 
      for (int j = i + 1; j < counted.length; j++) { 
       if (arg.charAt(j) == c) { 
        counter++; 
        counted[j] = true; 
       } 
      } 
      res += counter + "" + c; 
     } 
    } 
    return res; 
} 
+0

유용 할 수 있지만 "public static String"머리를 보면 함수가 문자열을 반환해야합니다. –

+0

@ItayBenMoshe 지금 내 대답을 편집하겠습니다. 유용하다고 생각되면 true로 표시하십시오. –

+0

훌륭한 직업! C 'char'변수를 생성하는 것을 잊어 버렸습니다. 감사! :) –

0

이 시도 :

int count = StringUtils.countMatches("a.b.c.d", "."); 
+0

이것은 java, C++가 아닙니다 ... –

+0

죄송합니다. Java 솔루션 – user3272686

+0

으로 변경했습니다. 여전히 질문에 대답하지 않습니다. , 그리고 [여기] (http://stackoverflow.com/q/275944/5743988)에서 표절 된 것으로 보인다. 이 질문이 중복 된 것으로 생각되면 질문에 해당하는 것으로 표시하십시오. – 4castle

1

직접적인 변형은 다음과 같이 볼 수 있었다 StringBuilder을 사용하면 이미 본 문자를 삭제할 수 있습니다. 캐릭터를 삭제하는 경우 인덱스 ij을 조정해야합니다.

public static String numLetters(String str){ 
    StringBuilder s = new StringBuilder(s); 
    String end = new String(); 
    int counter = 0; 
    char c,d; 
    for(int i=0; i<s.length();i++){ 
     c = s.charAt(i); 
     for(int j=0; j<s.length();j++){ 
      d = s.charAt(j); 
      if(c == d){ 
       s.deleteCharAt(j); 
       if (i >= j) i--; 
       j--; 
       counter++; 
      } 
     } 
     end = end + counter+c; 
     counter = 0; 
    } 

    return end; 
} 
+0

'O (n^2)'평균, 내 대답은 –

1

:

public static String numLetters(String s) { 
    int[] count = new int[26]; 
    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     count[(int)(c - 'a')]++; 
    } 
    String ans = ""; 
    for (int i = 0; i < 26; i++) { 
     if (count[i] != 0) { 
      ans += String.valueOf(count[i]) + (char)(i + 'a'); 
     } 
    } 
    return ans; 
} 
+0

보이지 않습니다, 나는 그런 접근법을 사용하지 않는 것을 선호합니다. –