圧縮プログラムJS 2級文字列


いつの間にか、プログラマーの第2段階が解けています.第2段階から効率をチェックし、問題が複雑なところもあり、確かに難しいです.
いくつかの質問は検索機会で説明を見て、質問を理解しました.これからは自分の力で自分が解くまで解きます.
今回はいくつかのヒントを見ましたが、自分で解決した問題をやっとブログに書きました.
問題は文字列圧縮です!
2020年のココア豆問題...どうやって時間内にこれを解くか分かりません.
草は1日くらいかかるようです.少し迷っていたので検索機会を使い、1、2箇所修正すれば正解に近づく.内心はうれしくて残念だ.
あまり長く続けるわけでもないので、質問で1~2時間考えて、ダメなら解説を見て勉強することにしました.
これは私が解いたアルゴリズムです.
function solution(s) {
  let arr = [];
  for(let i=1;i<Math.ceil(s.length/2)+1;i++){
    let count =1;
    let sum = '';
    for(let j=0; j<s.length;j+=i){
		let front = s.slice(j,i+j)
    let sliceS= s.slice(i+j) 
    let back = sliceS.slice(0,i)
    if(front===back){
     
      count++
    }else{
      if(count>1){
        sum += count+front;
       
      }else{
        sum+=front
      }
       count=1;
    }
    
    }
    arr.push(sum.length)
  }
  return Math.min.apply(null,arr)
}
sliceを使って問題を解く.
説明するには、文字を比較するためにfor文で桁数を増やして、字を分けます.
前、後はそれぞれ比較し、前の部分は既存の文字列から切り取り、後の部分は前から切り取った文字列から再び切り取って使用します.
どうやって切るかいろいろ考えましたが、頭の中で計算するのは確かに難しいです.
次にクリップを比較し、前後が同じであればcountを増やします.
比較が異なる場合、countが1より大きい場合はcountを追加します.
次に、文字列を1つの配列に組み合わせて最大値を求めます.
サマリ
1.前後2文字を分けて比較する
2.文字を比較すると、同じであればcount数を増やし、異なる場合はcountを増やすと加算し、ない場合はそのまま文字列を付ける.
3.配列に文字を含め、配列に最小長の値を返します.
2つのヒントで学ぶことができます.

  • Math.ceil(s.length/2)+1
    この部分は検索解説で知りました.最初は、s.lengthをi値で割った.
    でも回りきれずに探したら2つに分かれた気がします
    文字列を半分にカットすると効果が出るが、文字列を半分以上にカットすると効果が出ないからだ.
    たとえば、8桁の数字であれば、2つの数字を4/4の半分に切り取ることができます.
    5/3のほうが意味がありません.
    だから、Math.価格をceil iで配布し,+1の効果を達成するために昇格処理を行った.
    しかし问题は解けないところがある+1问题をプラスして解决しました...

  • Math.min.apply(null,arr)
    最高値を求めるとMathminでいいと思っていましたが、配列にどう書けばいいか分かりません.
    null値が出ているので、このように書くことができないので、検索してapplyを書くことができます.
    応用についてもよく知っています.
  • もっと成長して、このような問題も早く解決しなければなりません.がんばってください.