
題目解析:判斷兩個字串能不能透過交換裡面的字母,或是把某種字母全部變成另一種字母,來讓兩個字串長得一模一樣
解題思路:先判斷兩個字串長度一不一樣,不一樣就直接回傳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;
}
};

題目解析:給定一個矩陣,找出裡面有幾組「橫排」跟「直排」的數字組合與順序是完全一模一樣的
解題思路:先設一個變數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;
}
};

題目解析:拿到一個包含星號的字串,只要遇到星號,就把星號左邊最近的字元跟星號一起刪除,最後回傳處理完的字串
解題思路:先設一個空字串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;
}
};