[LeetCode] Valid Palindrome (JS)

nRecode·2021년 1월 7일
0

Algorithm

목록 보기
25/48

문제

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

입출력 예
Input: "A man, a plan, a canal: Panama"
Output: true

접근

  1. 입력 s를 모두 소문자의 상태로 바꾼다.
  2. 문자, 숫자를 제외하고는 모두 없앤 새 변수를 만든다.
  3. reverse와 비교!

풀이

var isPalindrome = function(s) {
    
    // 순수한 상태로 돌린다... (소문자로, ,나:같은 문자 제외)
    // reverse 후 같으면 return true
    
    s = s.toLowerCase();
    let charS = ''
    
    for(let i of s){
        if((i >= 'a' && i <= 'z') || (i >= '0' && i <= '9')){
            charS += i
        }
    }
    let reverseS = charS.split('').reverse().join('');
    return reverseS === charS;

for문을 대체하여 정규표현식을 사용할 수 있을 것 같다!

다른방법

s를 ascii로 변환하여 비교하는 방법이다.

var isPalindrome = function(s) {
    
    let start = 0;
    let end = s.length - 1;
    while(start < end){
        let startChar = s.charCodeAt(start); // ascii로 변환...
        let endChar = s.charCodeAt(end);
        console.log(startChar,endChar)
        // 숫자나 문자가 아니면 무시
        console.log(isLetter(startChar), isLetter(endChar))
        if(!isLetter(startChar)){
            start++;
            continue;
        }
         if(!isLetter(endChar)){
            end--;
            continue;
        }
        if (toLowerCase(startChar) !== toLowerCase(endChar)){
            return false;
        }
        start++;
        end--;
    }
    return true;
      
};
    
var isLetter = function(code) { 
    if ((code >= 48 && code <= 57) || // number
        (code >= 65 && code <= 90) || // uppercase
        (code >= 97 && code <= 122)){ // lowercase
        return true;
    }else{
        return false;   
    }    
}
    
var toLowerCase = function(code) {
    if (code >= 65 && code <= 90) {
        return code + 32 ;   
    }
    else {
        return code;
    }
}
profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글

관련 채용 정보