iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
Software Development

30天刷完leetcoode75系列 第 8 篇

C++ 演算法練習 Day8|1657 ,2352 ,2390題解與思路分享

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260922/201842659C4iLEHTJc.png

題目解析:判斷兩個字串能不能透過交換裡面的字母,或是把某種字母全部變成另一種字母,來讓兩個字串長得一模一樣
解題思路:先判斷兩個字串長度一不一樣,不一樣就直接回傳0,接著設兩個陣列來紀錄每個字母出現的次數,然後丟進迴圈開始跑。跑完後檢查兩個字串出現過的字母種類是不是完全一樣,如果有人有某個字母但另一個人沒有就回傳0。最後把兩個陣列排個序,檢查字母出現的次數組合是不是一樣,如果完全一樣就回傳1

class Solution {
public:
    bool closeStrings(string word1, string word2) {
        if(word1.size() != word2.size()) return 0;   
        vector<int> v(26, 0), v1(26, 0);

        for(int i=0; i<word1.size(); i++){
            v[word1[i]-'a']++;
            v1[word2[i]-'a']++;
        }

        for(int i=0; i<26; i++){
            if((v[i] != 0 && v1[i] == 0) || (v[i] == 0 && v1[i] != 0)) return 0;
        }

        sort(v.begin(), v.end());
        sort(v1.begin(), v1.end());

        for(int i=0; i<26; i++){
            if(v[i] != v1[i]) return 0;
        }

        return 1;
    }
};

https://ithelp.ithome.com.tw/upload/images/20260922/20184265laJGv3d4nU.png

題目解析:給定一個矩陣,找出裡面有幾組「橫排」跟「直排」的數字組合與順序是完全一模一樣的
解題思路:先設一個變數ans來紀錄有幾組,然後丟進三個迴圈開始跑,前兩個迴圈把每一列跟每一行都抓出來配對,第三個迴圈用來一個一個檢查裡面的數字,如果發現不一樣就直接中斷跳出,如果能一路檢查到最後一個數字都完全一樣,就把ans加1,最後回傳ans

class Solution {
public:
    int equalPairs(vector<vector<int>>& grid) {
        int ans = 0;

        for(int i=0; i<grid.size(); i++){
            for(int j=0; j<grid.size(); j++){
                for(int k=0; k<grid.size(); k++){
                    if(grid[i][k] != grid[k][j]){
                        break;
                    }

                    if(k == grid.size()-1){
                        ans++;
                    }
                }
            }
        }

        return ans;
    }
};

https://ithelp.ithome.com.tw/upload/images/20260922/20184265Llj1fGAw0R.png

題目解析:拿到一個包含星號的字串,只要遇到星號,就把星號左邊最近的字元跟星號一起刪除,最後回傳處理完的字串
解題思路:先設一個空字串ans,然後丟進迴圈開始跑,如果抓出來的字元不是星號,就把它加進ans裡面,如果遇到星號,就把ans最後面的一個字元拔掉,最後回傳ans

class Solution {
public:
    string removeStars(string s) {
        string ans = "";
        for (char c : s) {
            if (c != '*') {
                ans.push_back(c);
            } else {
                ans.pop_back();
            }
        }
        return ans;
    }
};

上一篇
C++ 演算法練習 Day7|724, 2215, 1207題解與思路分享
下一篇
C++ 演算法練習 Day9|735, 394題解與思路分享
系列文
30天刷完leetcoode75 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言