https://leetcode.com/problems/letter-case-permutation/
문제
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 |
Comment