白駿6137-文字列生成


問題を解く
文字列の末尾を確認しながら、辞書順に先頭の文字を追加し、同じ文字が表示された場合は、辞書順に先頭の文字をより深く検索して追加できます.
もう一度調べてみると、文字の両側が同じで、最終的に追加されていない場合は、どちらにでも置くことができます.
質問リンク
boj/6137
ソースコード
PS/6137.java
import java.io.*;
import java.util.*;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


	public static void main(String[] args) throws IOException {
		int N = Integer.parseInt(br.readLine());
		char[] arr = new char[N];
		char[] t = new char[N];
		for (int i = 0; i < N; i++) {
			arr[i] = br.readLine().charAt(0);
		}

		int l = 0, r = N - 1, idx = 0;
		while (l <= r) {
			if (arr[l] < arr[r]) {
				t[idx++] = arr[l++];
			} else if (arr[l] > arr[r]) {
				t[idx++] = arr[r--];
			} else {
				int l2 = l, r2 = r;
				boolean flag =false;
				while (l2<=r2) {
					if (arr[l2] < arr[r2]) {
						flag =true;
						t[idx++] = arr[l++];
						break;
					} else if (arr[l2] > arr[r2]) {
						flag =true;
						t[idx++] = arr[r--];
						break;
					}
					else
					{
						l2++;
						r2--;
					}
				}
				if(!flag)
					t[idx++]=arr[l++];
			}
		}
		for(int i=0;i<N;i++) {
			bw.write(t[i]);
			if(i != 0 && (i+1) % 80 ==0)
				bw.write("\n");
		}
		bw.flush();
	}
}