0

非常に大きな文字列 (文字列 s <= 100000) 内の単語の統計を取得するプログラムを Java で作成しています。これには 1 秒もかからず、16 MB 未満のメモリしか使用しません。

import java.util.Scanner;
class Main{
 public static void main(String[] args){


  Scanner sc = new Scanner(System.in);
  String t = sc.nextLine();
  int i=0;
  while(t.charAt(i)==' ') i++;
  t = t.substring(i);
  String[] s = t.split(" +");

  RecString[] stat  = new RecString[s.length];
  for(i=0; i<s.length;i++){
    stat[i] = new RecString("");  
  }
  int j=0;
  for(i=0; i<s.length;i++){
    int f=0;
    for(int h =0; h<stat.length; h++){
     if(stat[h].word.equals(s[i])){
       f = 1;
       stat[h].count++;
       break;
     }
    }
    if(f==0){
      stat[j] = new RecString(s[i]);
      j++;
    }
  }
  for(i=0;i<=j;i++){
   if(stat[i].word != ""){
      System.out.println(stat[i].word+" "+(stat[i].count));
   }
  }


 }
}

class RecString{
    public  String word;
    public  int count;

    public RecString(String s){
        word = s;
        count = 1;
    }

}

このコードは長さ <=255 の文字列で機能しますが、大きな文字列の場合、時間またはメモリの制限があります。

プログラムの最適化を手伝ってください

4

1 に答える 1