Java向け競プロライブラリ(ランレングス)

文字列をランレングス圧縮すると解きやすい問題向けのライブラリです。なお、本記事では自前ライブラリのPairを利用しています(以下参照)。

Java向け競プロライブラリ(ペア) - JunKobayashi’s diary

 

例えば以下の問題で役に立ちます。

AtCoder Beginner Contest 299 C - Dango

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public final class RunLength {

	public static final List<Pair<Character, Integer>> getRunLengthOf(String s) {
		var res = new ArrayList<Pair<Character, Integer>>();
		for (int i = 0, len = 0, prevChar = s.charAt(0), n = s.length(); i < n; ++i) {
			if (s.charAt(i) == prevChar) {
				++len;
			} else {
				var p = new Pair<Character, Integer>((char) prevChar, len);
				res.add(p);
				len = 1;
				prevChar = s.charAt(i);
			}

			if (i == n - 1) {
				var p = new Pair<Character, Integer>((char) prevChar, len);
				res.add(p);
			}
		}
		return res;
	}

}