2

こんにちは、私は宿題の問題を与えられました。そこでは、文字列のすべての異なる部分文字列を見つけるように求められます。文字列のすべての部分文字列を通知するメソッドを実装しましたが、割り当ては個別のものを見つけることであるため、すでに部分文字列として一度カウントされているものをカウントしない方法を理解するのに助けが必要です。

public int printSubstrings1(int length)
{ 
    for(int i=0; i<text.length()-length+1;i++)
    {
        String sub = text.substring(i,length+i);

        counter++;
    }
    return counter;

}

ここで、与えられた文字列から必要な部分文字列の長さを渡しています。私は別の方法でそれをやっています。

したがって、指定された文字列の例は「fred」であり、個別の部分文字列は 10 になります。文字列には繰り返し文字が含まれていないため、私のメソッドは正しい答えを出力します。部分文字列が繰り返される部分で立ち往生しています。

私がフレッドを入力した場合。これが私のメソッドが出力するものです

長さ 1
フレッド 長 さ 2
フレッド 長 さ 3
フレッド 長 さ 4 フレッド









4

6 に答える 6

4
public ArrayList<String> getAllUniqueSubset(String str) {
        ArrayList<String> set = new ArrayList<String>();
        for (int i = 0; i < str.length(); i++) {
            for (int j = 0; j < str.length() - i; j++) {
                String elem = str.substring(j, j + (i+1));
                if (!set.contains(elem)) {
                    set.add(elem);
                }
            }
        }
        return set;
    }
于 2014-06-23T17:51:40.903 に答える
3

ここでセットの例

public int printSubstrings1(int length) {
    Set<String> set = new HashSet<String>();
    for(int i=0; i < text.length() - length + 1; i++) {
        String sub = text.substring(i,length+i);
        set.add(sub);
    }
    for (String str : set) {
        System.out.println(str);
    }
    return set.size();
}
于 2012-11-03T21:46:42.530 に答える
0

新しい部分文字列を配列に挿入し、それが既に利用可能かどうかを確認します。それ以外の場合は、配列に追加しないでください。完了したら、配列をループして、個別のサブ文字列を出力します。

要素が配列に存在するかどうかを確認するには、配列と値をパラメーターとして受け取る関数を作成します。true が返された場合、値を探して配列をループします。ループの外では false を返します。

例えば

public static boolean(String target, String[] arr)
{
  for(int i = 0; i < arr.length; i++){
      if(arr[i].equals(target))
         return true;
  }
   return false;
}
于 2012-11-03T21:46:33.710 に答える