JS알고리즘 문자열탐색 풀이2

dowon kim·2023년 9월 20일

나의풀이

function solution(str, t) {
  //문자열내 t의 인덱스값들을 구한다
  //각 요소를 조회하며 좌우의 t의 인덱스를 체크한다
  //더가까운 t와의 거리를 구한다
  let indices = [];
  let result = [];
  for (let i = 0; i < str.length; i++) {
    if (str[i] === t) {
      indices.push(i);
    }
  }
  for (let i = 0; i < str.length; i++) {
    const distances = indices.map(index => Math.abs(index - i));
    result.push(Math.min(...distances));
  }
  return result;
}

best solution

function solution(str, t) {
    let result = new Array(str.length).fill(Infinity);
    let lastTIndex = -Infinity;  // 초기값을 음의 무한대로 설정합니다.
    
    // 왼쪽에서 오른쪽으로 순회
    for (let i = 0; i < str.length; i++) {
        if (str[i] === t) {
            lastTIndex = i;
        }
        result[i] = i - lastTIndex;
    }

    // 오른쪽에서 왼쪽으로 순회
    lastTIndex = Infinity;  // 초기값을 양의 무한대로 설정합니다.
    for (let i = str.length - 1; i >= 0; i--) {
        if (str[i] === t) {
            lastTIndex = i;
        }
        result[i] = Math.min(result[i], lastTIndex - i);
    }

    return result;
}

나의답안

function solution(str) {
  //반복문으로 str전체를 조회한다
  //다음 인덱스의 문자가 일치할때 카운팅 +
  //아닐경우 문자열을 결과배열에 푸시
  //cnt가 2이상일때만 cnt를 함께푸시
  //결과배열을 join으로 합쳐서 리턴
  let cnt=1;
  let result=[];
  for (let i = 0; i < str.length; i++) {
    if(str[i+1]===str[i]) cnt++;
    else
     {
      result.push(str[i]);
       if(cnt>1)result.push(cnt);
      cnt=1;
    }
  }
  return result.join('')
}
profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn

0개의 댓글