果然第二週最後一天出現新題目了,不過看題目描述也很直觀,推測應該也是 Easy 等級。

題目會給定一個字串和一串二維整數陣列:根據整數陣列第一個值決定要 left shift or right shift,第二個值決定 shift 多少。

Input: s = "abc", shift = [[0,1],[1,2]]
Output: "cab"
Explanation: 
[0,1] means shift to left by 1. "abc" -> "bca"
[1,2] means shift to right by 2. "bca" -> "cab"

首先先把 shift 掃一次,就可以知道最後要 apply 的 shift 方向和位數,接著再分別處理就可以了。

string stringShift(string s, vector<vector<int>>& shift) {
    if(s.empty())
        return NULL;

    int cnt = 0;
    string ans;
    
    for(int i=0; i<shift.size(); i++){
        cnt += shift[i][0] ? shift[i][1] : -1 * shift[i][1];
    }
    
    cout << cnt << endl;

    if(cnt > 0){
        cnt %= s.size();
        for(int i=(int)s.size() - cnt; i< s.size(); i++)
            ans.push_back(s[i]);
        for(int i=0; i<s.size() - cnt; i++)
            ans.push_back(s[i]);
    } else {
        cnt = abs(cnt);
        cnt %= s.size();
        for(int i=cnt; i< s.size(); i++)
            ans.push_back(s[i]);
        for(int i=0; i<cnt; i++)
            ans.push_back(s[i]);
    }
 
    return ans;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料