Alternativ lösning 3: Index i yttre loop, tokens i inre

2011-02-18 Tobias HillTobias Hill

En av våra interna referenslösningar på Citerus skrevs av Patrik Åkerfeldt och hade ett löpande index i den yttre loopen och tokens-iteration i den inre. Som optimering hoppar den över redan genomsökta delar av strängen i djupare rekursioner. 

 

public class PaakReducer {

    public int stepBackAtMatch = 0;

    private int shortestStringLength = Integer.MAX_VALUE;
    private String shortest;
    private String[] reducers;

    public PaakReducer(String... reducers) {
        this.reducers = reducers;
        int maxLen = 0;
        for (String reducer : reducers) {
            maxLen = Math.max(reducer.length(), maxLen);
        }
        stepBackAtMatch = maxLen - 1;
    }

    public String reduce(String target) {
        recursive(target, 0);
        return shortest;
    }

    private void recursive(String target, int startIndex) {
        int index = (startIndex < 0 ? 0 : startIndex);

        while (index < target.length()) {
            for (String r : reducers) {
                if (target.substring(index).startsWith(r)) {
                    String newtarget = target.substring(0, index) + target.substring(index + r.length());
                    recursive(newtarget, index - stepBackAtMatch);
                }
            }
            index++;
        }

        if (target.length() < shortestStringLength) {
            shortestStringLength = target.length();
            shortest = target;
        }
    }
}


Kommentera artikeln

Din kommentar

Hantering: Publiceras inte. Vi delar aldrig din e-post med tredje part och vi skickar aldrig oönskad reklam.

Karin Edsröm, VD på Citerus

Vi söker konsulter!

Vi vet att man kan förändra världen med hjälp av mjukvara. Vill du vara med?  Bli en av oss →

 

Inspiration via e-post

  Artiklar om framgångsrik mjukvaruutveckling
  Information om nya kurser och seminarier

Du kan enkelt säga upp din prenumeration om du ändrar dig. Vi lämnar aldrig ut e-postadresser till tredje part.
Läs mer om hur vi hanterar personuppgifter.

 

 

 

Om Citerus

Citerus hjälper företag att lyckas med sin mjukvaruutveckling. Vi erbjuder metodinförande, kurser och träning samt systemutveckling och kan dessutom avlasta våra kunder genom ta oss an både delprojekt och hela projektåtaganden. Allt för att de ska kunna hålla en hög innovationstakt och skapa smarta lösningar som ökar deras konkurrenskraft. Citerus kunder har den gemensamma nämnaren att de ser mjukvaruutveckling som affärskritiskt. Läs mer →

monthly
0.5