[Medium] 784. Letter Case Permutation

https://leetcode.com/problems/letter-case-permutation/

 

Letter Case Permutation - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제

Given a string s, you can transform every letter individually to be lowercase or uppercase to create another string.

Return a list of all possible strings we could create. Return the output in any order.

 

예시

Example 1:

Input: s = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]

Example 2:

Input: s = "3z4"
Output: ["3z4","3Z4"]

 

제약조건

Constraints:

  • 1 <= s.length <= 12
  • s consists of lowercase English letters, uppercase English letters, and digits.

 

풀이 과정

  • 본 solution 함수에서 사용할 도우미 함수 isLetter(), isUpper(), replaceAt() 함수를 만든다.
  • 문자열 S를 배열로 변환한다.
  • for문을 돌며 S의 값이 문자열인지 확인한다.
  • 대문자면 소문자, 소문자면 대문자인 newChar를 생성한다.
  • res에 foreach를 순회하며 curr값에 현재 S[i]를 newChar로 대신하는 replaceAt() 반환값을 넣는다.
    • 여기서 foreach를 도는 이유는, res의 모든 요소에 S[i] 값을 대체시켜주어야 하기 때문이다.

 

풀이 코드

/**
 * @param {string} s
 * @return {string[]}
 */
const isLetter = (s) => {
  const n = s.charCodeAt(0);
  return (n >= 65 && n < 91) || (n >= 97 && n < 123);
};

const isUpper = (s) => {
  const n = s.charCodeAt(0);
  return n >= 65 && n < 91;
};

const replaceAt = (s, c, i) => {
  return (s = s.substring(0, i) + c + s.substring(i + 1));
};

function letterCasePermutation(S) {
  const res = [S];

  for (let i = 0; i < S.length; i++) {
    if (isLetter(S[i])) {
      const newChar = isUpper(S[i]) ? S[i].toLowerCase() : S[i].toUpperCase();

      res.forEach((curr) => {
        res.push(replaceAt(curr, newChar, i));
      });
    }
  }

  return res;
}

'leetCode' 카테고리의 다른 글

[Medium] 198. House Robber  (0) 2022.05.23
[Easy] 70. Climbing Stairs  (3) 2022.05.23
[Medium] 46. Permutations  (0) 2022.05.19
[Medium] 77. Combinations  (0) 2022.05.19
[Easy] 21. Merge Two Sorted Lists  (0) 2022.05.18