N

(Leet Code c++)Valid Palindrome 본문

Leet Code 알고리즘

(Leet Code c++)Valid Palindrome

naeunchan 2021. 7. 16. 16:07
728x90
반응형

125. Valid Palindrome

 

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

 

Example 1:

Input: s = "A man, a plan, a canal: Panama" Output: true Explanation: "amanaplanacanalpanama" is a palindrome.

Example 2:

Input: s = "race a car" Output: false Explanation: "raceacar" is not a palindrome.

 

Constraints:

  • 1 <= s.length <= 2 * 105
  • s consists only of printable ASCII characters.

주어진 문자열 s가 영숫자로 이뤄진 팰린드롬인지 확인해야 한다.

우선 s를 모두 소문자로 바꿔주고, for문을 통해 알파벳과 숫자인 문자만 tmp 문자열에 추가한다.

 

tmp가 영숫자로 된 문자열이기 때문에 front와 back을 이용해 앞과 뒤를 비교하면 된다.

(만약 tmp가 비어있으면 while문을 거치지 않고 바로 true 리턴)

front와 back의 인덱스를 각각 늘려주거나 줄이면서 비교하면 된다.

class Solution {
public:
    bool isPalindrome(string s) {
        string tmp = "";
        
        transform(s.begin(), s.end(), s.begin(), ::tolower);
        
        for(int i = 0; i < s.size(); i++){
            if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9')){
                tmp += s[i];
            }
        }
        
        int front = 0;
        int back = tmp.size() - 1;
        
        while(!tmp.empty() && front <= back){
            if(tmp[front++] != tmp[back--]){
                return false;
            }
        }
        
        return true;
    }
};
728x90
반응형