文字列圧縮


質問する



もんだいぶんせき


文字列を1組の文字列に圧縮することで、圧縮に最適な文字列数を求めて長さを求める問題.

に答える


実際に文字列を修正して圧縮したが、これは문자열ではなく문자열의 길이をコミットする問題である.形式にこだわっているので、なかなか解けません.

開始位置と数量


文字列セットを開始位置と個数で区切ります.jは1つの列の開始位置であり、iは1つの列のカウントであり、文字列のカウント圧縮率を求める.
		//i=길이, j=시작위치
        for(int i=1;i<s.length()/2+1;i++){
            String prev = s.substring(0,i); //시작 문자 묶음
            int count = 1; //연속되는 갯수
            String temp = ""; //버퍼
            String last = ""; //마지막은 따로(묶음 갯수와 남은 문자갯수는 다를수 있음)
tempは現在圧縮された文字列であり、lastは最後の残りの部分を処理するための文字列である.

文字列グループの比較

			for(int j=i; j<s.length(); j+= i){
                if(j+i>s.length()){
                    last = s.substring(j);//남은 문자열이 i보다 작은경우
                    continue;
                }
                if(prev.equals(s.substring(j,j+i))) //연속
                    count++; //갯수 증가
                else{
                    temp += prev; //길이만 맞추자! 꼭 압축 형식 맞출 필요 없는 문제!
                    if(count > 1){ //연속
                        temp = count + temp; //숫자 추가
                    }
                    prev = s.substring(j,j+i);
                    count = 1;
                }
            }
残りの文字列をj+i > s.length()で比較し、prev.equals(s.substring(j,j+i))で文字列が連続しているかどうかを計算します.countは連続性を比較するために使用され、prevは前の文字列の連続性を比較するために使用される.

残りの文字列の処理と圧縮の比較

			temp += prev + last; //마지막 나머지
            if(count > 1)
                temp = count + temp;
            
            //최소 길이 비교
            if(answer > temp.length())
                answer = temp.length();
最後の残りの部分を追加し、最小長であるかどうかを比較します.

コード#コード#

class Solution {
public int solution(String s) {
    int answer = s.length(); //1단위 일때 최소
   
    //i=길이, j=시작위치
    for(int i=1;i<s.length()/2+1;i++){
        String prev = s.substring(0,i); //시작 문자 묶음
        int count = 1; //연속되는 갯수
        String temp = ""; //버퍼
        String last = ""; //마지막은 따로(묶음 갯수와 남은 문자갯수는 다를수 있음)
   
        for(int j=i; j<s.length(); j+= i){
            if(j+i>s.length()){
                last = s.substring(j);//남은 문자열이 i보다 작은경우
                continue;
            }
            if(prev.equals(s.substring(j,j+i))) //연속
                count++; //갯수 증가
            else{
                temp += prev; //길이만 맞추자! 꼭 압축 형식 맞출 필요 없는 문제!
                if(count > 1){ //연속
                    temp = count + temp; //숫자 추가
                }
                prev = s.substring(j,j+i);
                count = 1;
            }
        }
        temp += prev + last; //마지막 나머지
        if(count > 1)
            temp = count + temp;
       
        //최소 길이 비교
        if(answer > temp.length())
            answer = temp.length();
    }
   
    return answer;
}
}

GitHub


https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9.java