算法訓練營2021學習


算法訓練營2021

鏈接: https://pan.baidu.com/s/1d6YONkCi4u7T1ZBm1yZLYg 提取碼: iamh
作者-\/ 307570512

無空格字符構成一個單詞。
輸入字符串可以在前面或者后面包含多余的空格,但是反轉后的字符不能包括。
如果兩個單詞間有多余的空格,將反轉后單詞間的空格減少到只含一個。
進階: 請選用C語言的用戶嘗試使用 O(1) 空間復雜度的原地解法。

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.empty() || nums2.empty())
            return vector<int>();
        
        unordered_set<int> st;
        for(auto a : nums1)
            st.insert(a);
        
        vector<int> res;
        for(int a : nums2)
        {
            if(st.count(a) > 0)
            {
                res.push_back(a);
                st.erase(a);
            }
        }
        
        return res;
    }
};
Python代碼

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        s = set()
        res = []
        for a in nums1:
            s.add(a)
        for a in nums2:
            if a in s:
                res.append(a)
                s.remove(a)
        return res

單詞間的空格要減到一個,因此需要另一塊內存來存放消除掉空格的字符串
s首尾都有可能有空格,所以剛開始需要過濾掉收尾的空格
s可能全都是空格,這種情況輸出空字符串
時間復雜度:O(n)
空間復雜度:O(n)

class Solution {
public:
    void reverseWords(string &s) {
        if(s.empty()) return;
        while(!s.empty() && s.back() == ' ')
            s.pop_back();
        
        if(s.empty()) return;
        
        reverse(s.begin(),s.end());
        
        while(!s.empty() && s.back() == ' ')
            s.pop_back();
        
        string s1(s);
        s.clear();
        
        int len = s1.size();
        int l = 0,r = 0;
        
        while(r < len)
        {
            if(s1[r] == ' ')
            {
                reverse(s1.begin() + l,s1.begin() + r);
                copy(s1.begin() + l,s1.begin() + r + 1,back_inserter(s));
                while(s1[r] == ' ' && r < len) r++;
                l = r;
            }
            
            r++;
        }
        
        reverse(s1.begin() + l,s1.begin() + r);
        copy(s1.begin() + l,s1.begin() + r,back_inserter(s));
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM