Längster Run

So hab´s doch noch hinbekommen.... ;-)

thx


Code:
public class LaengsterRun {
	public static void main(String[] args) {
		String run = "abdddddddddefddddd";
		run(run);
	}
	public static void run(String str) {
		int counta = 0;
		int count = 0;
		String temp = "";
		String längsterRun = "";
		try {
			for (int i = 0; i <= str.length() - 1; i++) {
				if (str.charAt(counta) == str.charAt(i)) {
					temp += str.charAt(i);
					count += 1;
				}
				if ((str.charAt(counta) != str.charAt(i))
					|| count == str.length()) {
					counta = i;
					i = counta - 1;
					if (längsterRun.length() < temp.length()) {
						längsterRun = temp;
					}
					temp = "";
				}
			}
			System.out.println(
				"Der Längste Run des Strings: "
					+ str
					+ "\nist: "
					+ "\""
					+ längsterRun
					+ "\""
					+ "\nmit: "
					+ längsterRun.length()
					+ " Zeichen");
		} catch (IndexOutOfBoundsException s) {
			System.out.println("s");

		}
	}
}
 
Code:
} catch (IndexOutOfBoundsException s) {
			System.out.println("s");

		}

sollte wohl:

Code:
} catch (IndexOutOfBoundsException s) {
			System.out.println(s);

		}

Heißen ... ;-)

Okay, wenn man mal das Gehirn einschaltet und das Ganze Collection Gerümpel wegläßt gehts auch :

Code:
public class LongestRun {

	public static void main(String[] args) {
		System.out.println(getLongestRun("aqqqqhkjdhkjhkjhdassdaewwzwzzzzwzqzzzzzzwwiiiiiiiqwiwqiweqwooooooooooooooooooas"));
	}

	/**
	 * @param string
	 */
	private static String getLongestRun(String string) {
		int len = string.length();
		int cnt = 0;
		char c = 0;
		char cOld = string.charAt(0);

		char maxC = 0;
		int maxCnt = 0;

		for (int i = 0; i < len; i++) {
			c = string.charAt(i);

			if (c != cOld) {
				if (maxCnt < cnt) {
					maxC = cOld;
					maxCnt = cnt;
				}
				cnt = 0;
			}
			cOld = c;
			cnt++;
		}
		
		return maxC
			+ " kommt mit "
			+ maxCnt
			+ " mal am häufigsten direkt hintereinander in der übergebenen Zeichenkette vor";
	}
}

Gruß Tom

Gruß Tom
 
was genau macht

Integer integer = (Integer) map.get(key);

if (integer == null || integer.intValue() < cnt) {
map.put(key, new Integer(cnt)); .....
}

für was ist der Integer.
Habe noch nie was mit HashMaps gemacht und aus der API wird nicht genaus ersichtlich was da eigentlich passiert.

mfg
 
Zuletzt bearbeitet:
Hallo!

HashMap ist ein sogenannter Assoziativer Speicher. D.h. du kannst in ihm Schlüsselwertpaare speichern wobei Schlüssel und Wert Referenztypen sein müssen. Da ich mir in der Map die jeweiligen Auftrittshäufigkeiten der Buchstaben hintereinander gemerkt habe und diese Häufigkeiten jedoch primitive int's sind musste ich diese int's in ihre Objektrepresentation (Ihre Wrapper Typen) umwandeln und dann erst in der HashMap speichern.

HashMaps brauchen für den Zugriff auf ein bestimmtes Wert eine konstante Zeit.
http://www.galileocomputing.de/open...0005256DieKlasseHashMapundassoziativeSpeicher

Gruß Tom
 
Was passiert wenn der String s="aaabbaaa" so aussieht. Da
kann die Map nicht mehr welcher Key dann gemeint ist bzw. überschreibt die
Map dann bei put den anderen Wert der bei aaa als Value gespeichert ist?
 
Zurück