리버스 전용 문자

6203 단어 javascriptleetcode
문자열 s가 주어지면 다음 규칙에 따라 문자열을 뒤집습니다.

영문이 아닌 문자는 모두 같은 자리에 남습니다.
모든 영문자(소문자 또는 대문자)를 뒤집어야 합니다.
s를 뒤집은 후 반환합니다.

예 1:

입력: s = "ab-cd"
출력: "dc-ba"
예 2:

입력: s = "a-bC-dEf-ghIj"
출력: "j-Ih-gfE-dCba"
예 3:

입력: s = "Test1ng-Leet=code-Q!"
출력: "Qedo1ct-eeLg=ntse-T!"

var reverseOnlyLetters = function (arr) {
  let str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  let start = 0;
  let end = arr.length - 1;
  let s = arr.split("");

  while (start < end) {
    let charStart = s[start];
    let charEnd = s[end];

    if (str.includes(charStart) && str.includes(charEnd)) {
      s = swapChars(s, start, end);
      start++;
      end--;
    }

    if (!str.includes(charStart)) {
      start++;
    }
    if (!str.includes(charEnd)) {
      end--;
    }
  }
  return s.join("");
};

const swapChars = (s, start, end) => {
  let firstChar = s[start];
  let enChar = s[end];
  s[start] = enChar;
  s[end] = firstChar;
  return s;
};

console.log(reverseOnlyLetters("ab-cd"));
// Output: "dc-ba"

console.log(reverseOnlyLetters("a-bC-dEf-ghIj"));
// Output: "j-Ih-gfE-dCba"

console.log(reverseOnlyLetters("Test1ng-Leet=code-Q!"));
// Output: "Qedo1ct-eeLg=ntse-T!"

좋은 웹페이지 즐겨찾기