AOJ0077 Run Length

問題リンク Run Length

  • 解法

文字列を先頭から見ていき、'@'以外ならそのまま。'@'なら復元処理をします。
ちょっとした工夫の話をします。
文字列を作るときに
String ans = "";
としておいて、+文字列連結演算子で復元文字列を作っても勿論いいですが、Stringは不変クラスなので+連結するたびに新しいStringがnewされます。
この問題のように小さなサイズなら問題ないですが、長さ10^6の文字列sに
s += "hoge"
とかやると結構重くなります。
なので、文字列を生成するときはStringBuilderを使うと速いです。

  • ソース
import java.util.Scanner;

//Run Length
public class AOJ0077 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			char[] s = sc.next().toCharArray();
			StringBuilder sb = new StringBuilder();
			int i = 0;
			while(i<s.length){
				if(s[i]=='@'){
					int x = s[++i]-'0';
					i++;
					while(x--!=0)sb.append(s[i]);
				}
				else sb.append(s[i]);
				i++;
			}
			System.out.println(sb);
		}
	}
}