, , . : , .
Java- ( ), , . BANANA = > A, N, AN, NA, ANA (1,3), , , ( - , ):
public List<String> getRepetitions(String string) {
List<String> repetitions = new ArrayList<String>();
Map<String, List<Integer>> rep = new HashMap<String, List<Integer>>(), repOld;
for (int i = 0; i < string.length(); i++) {
String s = string.substring(i, i + 1);
if (rep.containsKey(s)) {
rep.get(s).add(new Integer(i));
} else {
List<Integer> l = new ArrayList<Integer>();
l.add(new Integer(i));
rep.put(l);
}
}
for (Map.Entry<String, Integer> e : rep.entrySet()) {
if (e.getValue().size() < 2) {
rep.remove(e.getKey());
} else {
repetitions.add(e.getKey());
}
}
for (int len = 1; rep.size() > 0; len++) {
repOld = rep;
rep = new HashMap<String, List<Integer>>();
for (Map.EntrySet<String, List<Integer>> e : repOld.entrySet()) {
for (Integer i : e.getValue()) {
if (i.intValue() + len + 1 >= string.length())
break;
String s = e.getKey() + string.charAt(i.intValue() + len + 1);
if (rep.containsKey(s)) {
rep.get(s).add(i);
} else {
List<Integer> l = new ArrayList<Integer>();
l.add(i);
rep.put(l);
}
}
}
for (Map.Entry<String, Integer> e : rep.entrySet()) {
if (e.getValue().size() < 2) {
rep.remove(e.getKey());
} else {
repetitions.add(e.getKey());
}
}
}
return repetitions;
}
BANANA:
rep = > B → [0], A → [1, 3, 5], N → [2, 4]- , 2 (B), (A, N)
- add the following letter to the remaining spaces (create a new one
rep): AN → [1, 3], NA → [2, 4] - Eliminate (-) and add (AN, NA)
- repetition of step 3. and 4 .: ANA → [1, 3]
- in the loop
repwill become empty and the algorithm is completed
source
share