942. DI String Match


💡に答える

/**
 * @param {string} s
 * @return {number[]}
 */
var diStringMatch = function (s) {
  let answer = [];

  let j = 0;
  let k = 0;

  for (let i = 0; i < s.length; i++) {
    if (s[i] === 'I') {
      answer.push(j);
      j++;
    } else {
      answer.push(s.length - k);
      k++;
    }
  }

  s[s.length - 1] === 'I' ? answer.push(answer[answer.length - 1] + 1) : answer.push(answer[answer.length - 1] - 1);

  return answer;
};

let s = 'IDID';
diStringMatch(s);

// 다른 사람의 풀이
const diStringMatch = (S) => {
  let num = [];

  let inc = 0;
  let dec = S.length;

  let i = 0;

  while (num.length !== S.length + 1) {
    num[i] = S[i] === 'D' ? dec-- : inc++;
    i++;
  }
  return num;
};

📝整理する


問題は、0とs.lengthの間の数字をI(=0일 때)D(s.length일 때)に区別することです.
2つのポインタj, kを使用して、s[i] === 'I'の場合はj、反対の場合はkを加えて、sの長さから対応する長さを減算します.
Discussionは、answer配列に直接プッシュするのではなく、インデックス内の要素をそのままに変換します.
修正、指摘を歓迎します!

質問リンク


https://leetcode.com/problems/di-string-match/

LeetCode GitHub


https://github.com/tTab1204/LeetCode