본문 바로가기

알고리즘/리트코드

139. Word Break

두가지 컨셉으로 접근할 수 있다.

첫째. BFS
인덱스 0부터 시작해서 특정 단어의 마지막 인덱스보다 1큰값을 큐에 넣어주면서 bfs진행

const wordBreak = function(s, wordDict) {
    const set = new Set(wordDict);
    const visited = new Set()
    const q = [0]
    while (q.length) {
        const start = q.shift()
        if (!visited.has(start)) {
            for (let end = start + 1; end <= s.length; end++) {
                if (set.has(s.slice(start, end))) {
                    if (end === s.length) return true;
                    q.push(end)
                }
            }
            visited.add(start)
        }
    }
    return false
};

둘째. dynamic programming

투포인터를 활용해서 그 단어가 단어리스트에 존재하면 table에 체크하면서 전진

const wordBreak = (s, wordDict) => {
  if (wordDict == null || wordDict.length === 0) return false;

  const set = new Set(wordDict);
  const dp = Array(s.length + 1).fill(false);
  dp[0] = true;

  for (let end = 1; end <= s.length; end++) {
    for (let start = 0; start < end; start++) {
      const w = s.slice(start, end);
      if (dp[start] === true && set.has(w)) {
        dp[end] = true;
        break;
      }
    }
  }
  return dp[s.length];
};

'알고리즘 > 리트코드' 카테고리의 다른 글

Leetcode 45. Jump Game II  (0) 2023.01.05
43. Multiply Strings  (0) 2022.09.12
54. Spiral Matrix  (0) 2022.04.30
22. Generate Parentheses  (0) 2022.04.16
33. Search in Rotated Sorted Array  (0) 2022.04.15