iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

leetcode解題學習java系列 第 8

30天LeetCode挑戰紀錄-DAY8. 制定第二週目標、Valid Anagram

  • 分享至 

  • xImage
  •  

終於完成第一週了~
今天來定第二週的題目然後再解一題吧

第一週:Array
第二週:Hash Table

  1. Valid Anagram (Easy)
  2. First Unique Character in a String (Easy)
  3. Word Pattern (Easy)
  4. Group Anagrams (Medium)
  5. Subarray Sum Equals K (Medium)
  6. Longest Consecutive Sequence (Medium)
  7. LRU Cache (Medium/Hard)

第三週:Dynamic Programming
第四週:Graph


題目

https://ithelp.ithome.com.tw/upload/images/20250922/20178158tbjUJVYr7m.png

題目說它會給兩個字串,分別是t跟s,然後如果兩個字串的全部字母出現次數都一樣就回傳true,如果不一樣就回傳false。
然後題目說它只會出現小寫字母。

想法

我想說可以記下他們的每一個出現過的字母,然後假設S字串出現的字母我就幫他+1,然後t字串出現的字母我就幫他-1。因為這只有要看他們的字母所以不用管順序,然後如果字母數量都一樣,就可以看出現的次數一不一樣,如果一樣的話那他們的記數應該都要是0才對。
所以就先判斷長度是不是一樣,不一樣就可以先刷掉了。然後創一個陣列,如果要記錄字母就在它的位置+1或-1,最後看這個陣列式不適每一個位置都是0。

程式碼

class Solution {
    public boolean isAnagram(String s, String t) {
        
        if (s.length() != t.length()) return false;  //檢查長度是否相同
        int[] count = new int[26];  //建一個記錄a-z的陣列陣列

        //統計s和t的字元出現次數
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++; //要-'a'把字元轉成索引
            count[t.charAt(i) - 'a']--;
        }

        //檢查陣列是否都為0
        for (int i = 0; i < count.length; i++) {
            int c = count[i];   
            if (c != 0) {      
                return false;
            }
        }
        return true;
    }
}

執行成功
https://ithelp.ithome.com.tw/upload/images/20250922/20178158UyZILA9qVk.png


上一篇
30天LeetCode挑戰紀錄-DAY7. Merge Intervals
下一篇
30天LeetCode挑戰紀錄-DAY9. First Unique Character in a String
系列文
leetcode解題學習java9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言