---
description: >-
  string 本身可以直接抓值，不用再轉 Array,  eg.  name ="hannah",  name[0] = "h"  / 基本 Regex
  要很熟練
---

# # 125 Valid Palindrome

[LeetCode](https://leetcode.com/problems/valid-palindrome/)

```
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: 可以呼略大小寫跟空白
```

```
Example 1:

Input: "A man, a plan, a canal: Panama"
Output: true

Example 2:

Input: "race a car"
Output: false

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {}
```

### 怎麼解

基本上看到回文題目都跟 Two Pointer 有關，我都習慣 pointer 當頭，ind 當 尾這樣 (不過命名你可以隨便命)。

```
var isPalindrome = function(s) {
    let re = /\W*/g;
    s = s.toLowerCase().replace(re, '');
    let pointer  = 0;
    let ind =  s.length - 1;
    while(pointer <= ind){
        if(s[pointer] !== s[ind]){
            return false;
        }else{
            pointer ++;
            ind --;
        }
    }
   
    return true;
};
```

### 學到什麼?

* 真的熟悉題型之後解起來快好多(真有成就感)。這題我本來還先&#x20;

```
s = s.split('') // String 轉陣列
s[pointer] // 去抓值
```

但其實可以省了 s.split('') 這道，因為字串本身也可以直接就抓

```
let name = "hannah";
name[0]; // "h"
```

* Regex:  太久沒用真的會忘記，我會再把它整理到 Tools 類別下面
