A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
Example 1:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Plain Text
복사
Example 2:
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
Plain Text
복사
Example 3:
Input: s = " "
Output: true
Explanation: s is an empty string "" after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.
Plain Text
복사
Constraints:
•
1 <= s.length <= 2 * 10^5
•
s consists only of printable ASCII characters.
My solution
모든 대문자를 소문자로 변환하고 알파벳이 아닌 문자를 모두 제거한 다음, 앞뒤로 읽을 때 같다면 이 구문은 팰린드롬입니다. 알파벳 문자에는 문자와 숫자를 포함합니다.
s가 주어지면 그것이 팰린드롬이면 true를 반환하고, 아니면 false를 반환합니다.
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Plain Text
복사
먼저 해야 하는 것은 알파벳과 숫자를 제외한 문자를 제거하는 것이다.
정규식 패턴으로 만들면 편하다.
const isPalindrome = function (s) {
console.log(s.replace(/[^A-Za-z0-9]/g, ''));
};
JavaScript
복사
이제 팰린드롬인지 확인하기 위해서 toLowerCase()를 해서 소문자로 맞춘다.
그리고 뒤집어서 기존 s와 비교한다.
Code
/**
* @param {string} s
* @return {boolean}
*/
const isPalindrome = function (s) {
const convertedS = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
return convertedS === convertedS.split('').reverse().join('');
};
describe('isPalindrome', () => {
it('TC1', () => {
expect(isPalindrome('A man, a plan, a canal: Panama')).toStrictEqual(true);
});
it('TC2', () => {
expect(isPalindrome('race a car')).toStrictEqual(false);
});
it('TC3', () => {
expect(isPalindrome(' ')).toStrictEqual(true);
});
});
JavaScript
복사