[プログラマ]文字列の圧縮


こんにちは。


MINDOLです
今日のソウルの温度は37度に上昇しましたとても暑い...ううう
昨日私は42群に行って、19年のマクドゥフ16インチを借りました.
やっぱり300万はちょっと違うタッチパネルがあり、重さも重いです.初めてMacBookでいい感じ
△実はimacと同じようにcluster imacは特別だと思っていましたが、macosはみんなそうだったようです.
あ、それから、いいニュースがあります.
私はプログラマーの質問に真剣に答えました.今では第一級の問題を全部解決しました.
ああ.引く.今日から2級問題をやりましょう!
そして問題レベルの変化を記念して言葉を変えましょう
私はまだ主言語を決めていないので、いろいろな言語で主言語を決めたいです.だから~これから使う言語はJava
JAvaは2年生の時に一度も勉強や使用したことがなく、今では非常に不慣れな状況です.
したがって,アルゴリズムの問題を解決しながらJavaを学習し,後でJavaを使用する.
質問リンク

文字列圧縮



(ああ、説明が長すぎて…;)

簡単に言えば、指定された文字列を一定のサイズ単位で切断し、重複する文字列の前に数字を付けて、重複しない圧縮文字列を作成します.
次に、作成できる圧縮文字列の中で最も短い圧縮文字列の長さを返します.
圧縮文字列の長さは、カット文字列の単位に依存します.
大きさ1で裁断してもよいし、裁断しなくてもよい.
では、質問の順番を整理しましょうか.

整理する

  • 文字列sを繰り返し文によって切り取り単位を増やします.
  • 文字列を切り出す場合、次の同じサイズの文字列に比べて冗長性がある場合、
    文字列に数字を付けると、個数
  • が表示されます.
    完了した
  • 圧縮文字列の長さをリストに保存します.
  • は、リストの最小値
  • を最後に返す.
    繰り返し文を使用して、クリップバッファのサイズを増やします.次に、接続された文字列に重複があるかどうかを確認し、重複した文字列がある場合はカウントします.
    重複する文字列がある場合は、インデックスをそのサイズに移動することを忘れないでください...!
    では、私の最初のjavafoulコードを見てみましょうか~~?
    import java.util.Arrays;
    
    class Solution {
    	public int solution(String s) {
    		int len = s.length();		// 문자열 총 길이
    		int answer[] =  new int[len];		// 압축 문자열 길이를 담을 배열
    		for (int i = 1; i < len + 1; i++) {		// 문자열 자르는 크기 i
    			String ret = "";		// 압축 문자열 만들기
    			for (int j = 0; j < len;) {		// 크기 i 단위로 자르고 압축하기
    				int cnt = 1;		// 반복되는 문자열 개수
    				String str = "";		// 크기 i만큼 나눈 문자열 버퍼
    				if (j + i < len) {		// 크기 i만큼 나눌수 있으면
    					str = s.substring(j, j + i);		// i부터 j-1까지 자르기
    					while (j+(i*(cnt + 1)-1) < len &&
    					str.equals(s.substring(j + (i * (cnt)), j + (i*(cnt+1)))))
    							// 중복되는 문자열이 있으면 반복
    						cnt += 1;		// 중복 개수 카운트
    					if (cnt > 1)		// 중복이 존재하면
    						ret += String.valueOf(cnt);		// 문자열에  중복표시
    					ret += str;			// 압축 문자열에 버퍼크기의 문자 추가
    				}
    				else {		// 나머지 문자열
    					str = s.substring(j);
    					ret += str;		// 압축 문자열에 추가
    				}
    				j += cnt * i;		// 중복 문자열 크기 포함해서 인덱스 이동
    			}
    			answer[i - 1] = ret.length();		// 리스트에 문자열 길이 대입
    		}
    		Arrays.sort(answer);		// 오름차순 정렬
    		return answer[0];		// 가장 작은 값 반환
    	}
    }
    最高のジャワ!
    既存の文字列をバッファサイズに切り取ってサブ文字列を作成し、新しい圧縮文字列に重複項目を表示してサブ文字列を結合するのは難題です.
    文字列のサイズは簡単です~配列に置いて、最後に並べ替えて最小値を求めます.
    今日からレベル2なので以前より時間がかかりました
    でも解くのに時間がかかった時は有意義でした
    2級征服に一歩踏み出したような気がします.:)
    これで終了では.

    さようなら~!