본문 바로가기
Algorithm/LeetCode

[006]Valid Palindrome

by BAYABA 2020. 8. 3.

 

문제: https://leetcode.com/explore/challenge/card/august-leetcoding-challenge/549/week-1-august-1st-august-7th/3411/


팰린드롬 찾기 문제입니다. 숫자와 영문자를 제외한 나머지 문자는 제외하고 팰린드롬인가를 물어보는 문제입니다.

 

맨 처음에 재귀로 풀었는데 생각보다 테케 문자열이 깁니다. 그러므로 재귀로 풀면 TLE이 납니다.

 

그래서 저는 deque를 활용하여 팰린드롬을 체크하였습니다. 

 

HEAD와 TAIL이 일치하면 계속 빼주다가 deque 사이즈가 1 또는 비게 되면 그 문자열은 팰린드롬입니다.

class Solution {
public:
    deque<char> dq;
    
    bool isPalindrome(string s) {
        string pureStr = "";
        for (int i = 0; i < s.size(); ++i) {
            if ('a' <= s[i] && s[i] <= 'z') {
                pureStr += s[i];
            }
            else if ('0' <= s[i] && s[i] <= '9') {
                pureStr += s[i];
            }
            else if ('A' <= s[i] && s[i] <= 'Z') {
                pureStr += ((s[i] - 'A') + 'a');
            }
        }
        
        if (pureStr.compare("") == 0) return true;
        else {
            for (int i = 0; i < pureStr.size(); ++i)
                dq.push_back(pureStr[i]);
            
            while (!dq.empty() && dq.size() != 1) 
            {
                char head = dq.front();
                char tail = dq.back();
                dq.pop_front();
                dq.pop_back();
                if (head != tail) {
                    return false;
                } 
            }
            return true;
        }
    }
};

'Algorithm > LeetCode' 카테고리의 다른 글

[008]Find All Duplicates in an Array  (0) 2020.08.07
[007]Add and Search Word - Data structure design  (0) 2020.08.06
[005]Sort Characters By Frequency  (0) 2020.05.26
[004]Jewels and Stones  (0) 2020.05.17
[003]First Bad Version  (0) 2020.05.16