---
# System prepended metadata

title: 有效字謎(Valid Anagram)
tags: [' LeetCode', Data Structure I]

---

---
tags: Data Structure I, LeetCode
disqus: HackMD
---

# 有效字謎(Valid Anagram)

## 虛擬碼

```pseudocode=

```

## 解題

[242. Valid Anagram](https://leetcode.com/problems/valid-anagram/?envType=study-plan&id=data-structure-i)

### 題目說明

給定兩個字串和 ，返回 if 是 的字謎，否則。sttruetsfalse
字謎是通過重新排列不同單詞或短語的字母而形成的單詞或短語，通常只使用一次所有原始字母。

![](https://i.imgur.com/gje0Svr.png)

### 解法

1. 首先判斷兩字串長度是否相同 如果不同回傳false
2. 迴圈判斷2字串是否有不同 (使用indexOf)
3. 回傳 `-1` 代表找不到相同的 回傳false
4. 回傳不是 `-1` 的就將同位置字元刪除 再跑一圈

第一種
**Javascript**

```javascript=
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    let s_len = 0; let t_len = 0;
    s_len = s.length; //s字串長度
    t_len = t.length; //t字串長度
    //首先判斷兩字串長度是否相同
    if (s_len !== t_len) {
        return false
    }

    let chk_arr = ''; //拿來判斷＆操作的字串
    chk_arr = t;
    //迴圈判斷是否有不同
    for (let i = 0; i < s_len; i++) {
        let chk_lt = -1; //檢查碼
        chk_lt = chk_arr.indexOf(s[i]);
        //chk_lt==-1 代表找不到相同
        if (chk_lt == -1) {
            return false;
        } 
        // 有相同的就將同位置字元刪除
        else
        {
            chk_arr = chk_arr.replace(chk_arr[chk_lt],"");
            // console.log(i + ',' + chk_lt + ',' + chk_arr );
        }
    }
    return true;
};
```



### chatGPT解說

這段程式碼是一個判斷兩個字串是否為異位字的函式，其中使用了字串的 length 屬性和 indexOf() 方法。

在這個函式中，indexOf() 方法被用於查找字串 t 中是否存在與字串 s 中的某個字符匹配的字符。如果存在，則在 chk_arr 中將該字符替換為空字串，以便在後續的迴圈中避免重複使用。如果 indexOf() 方法找不到與 s 中的字符匹配的字符，則返回 false，表示兩個字串不是異位字。

總結來說，雖然 indexOf() 方法是定義在陣列上的，但是字串也是一種類似於陣列的序列型資料結構，因此也可以使用 indexOf() 方法來查找特定字符的位置。
