记录D8-23.5.24

文章介绍了如何使用KMP算法检查字符串是否有重复子字符串,以及如何利用栈和队列实现特定功能:如用两个栈实现队列,用队列实现栈,以及有效括号的检查。这些是基于数据结构和算法的典型应用。

LC459 重复的子字符串

使用KMP算法

KMP好复杂…反正就是找到next数组,然后通过推理得到结果。如果 next[len - 1] != 0,则说明字符串有最长相同的前后缀。
如果len % (len - (next[len - 1])) == 0 ,则说明数组的长度正好可以被 (数组长度-最长相等前后缀的长度) 整除 ,说明该字符串有重复的子字符串。

class Solution {
public:
    void getNext(int* next, const string& s){
        int j=0;
        next[0]=0;
        for(int i=1;i<s.size();i++){
            while(j>0 && s[i]!=s[j]){
                j=next[j-1];
            }
            if(s[i]==s[j]){
                j++;
            }
            next[i]=j;
        }
    }
    bool repeatedSubstringPattern(string s) {
        int next[s.size()];
        getNext(next, s);
        int len=s.size();
        if(next[len-1]!=0 && len%(len-(next[len-1]))==0){
            return true;
        }
        return false;
    }
};

LC232 用栈实现队列

使用两个stack<int>来实现,一个作为输入栈stkIn,一个作为输出栈stkOut。
push()的实现就是stkIn的输入。

void push(int x){
	stkIn.push(x);
}

peek() 的实现就是:如果stkOut为空,那么将stkIn里面的所有元素都压到stkOut中,然后取top。如果stkOut不为空,那么直接输出top。

	int peek() {
        if(stkOut.empty()){
            while(!stkIn.empty()){
                stkOut.push(stkIn.top());
                stkIn.pop();
            }
        }
        return stkOut.top();
    }

pop()的实现就是先做一次peek(),先完成一次stkOut压入数据的过程,然后将stkOut.top()记录并pop。

   int pop() {
       peek();
       int ans=stkOut.top();
       stkOut.pop();
       return ans;
   }

empty()的实现过程就是判断两个辅助栈是不是都是空

    bool empty() {
        return stkIn.empty() && stkOut.empty();
    }

LC225 用队列实现栈

class MyStack {
public:
    queue<int> que;
    int stkTop=0;
    MyStack() {

    }
    
    void push(int x) {
        que.push(x);
        stkTop=x;
    }
    
    int pop() {
        int size=que.size();
        while(size>2){//留下队尾两个元素
            que.push(que.front());
            que.pop();
            size--;
        }
        //倒数第二个是新的栈顶元素
        stkTop=que.front();
        que.push(que.front());
        que.pop();
        //倒数第一个是原来的栈顶元素,就是要pop出去的。
        int ans=que.front();
        que.pop();
        return ans;
    }
    
    int top() {
        return stkTop;
    }
    
    bool empty() {
        return que.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

LC20 有效的括号

这道题首先定义一个哈希表,用来记录右括号对应的左括号。其实这里不用哈希表,用函数或者其他方法实现都是可以的。
然后使用一个stack来记录字符串的输入。遇到左括号就入栈,遇到右括号就去寻找最近的左括号,看看是否能够匹配上。

class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,char> umap={
            {')','('},
            {']','['},
            {'}','{'}
        };
        stack<char> stk;
        for(auto ch:s){
            if(umap.count(ch)){
                if(stk.empty()||stk.top()!=umap[ch]){//如果此时stk为空,或者stk的top和当前右括号的类型不匹配,那么false
                    return false;
                }
                stk.pop();
            }
            else{
                stk.push(ch);
            }
        }
        return stk.empty();
    }
};
"https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/46c2177de38707de286fe4ac7ffcfc43fa72518af28.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/8fd0ffc-f9494b73b8b4d4d2ab6a06175d56b5c6b01.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ba99328ab908b0a5799115d8b325a5b6d6.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/da4d3f11433b1b7e5d954d0eadd88f88480.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/3e05c-dbaa94d6f2b6b9d0f2b2f4c9cb81c629.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ee85c678e5a43c12bc4631b7dfe63c9d8fce59.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/4795c5983c7b46c1e95e9ec3c8058c5a7d8d05.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/0bcbd6a70119b2d9a4685adad455191eac91.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/9c4046545c33a47580a90135b2417cf0.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/c518356d8df1e8939b8585c12e6c6d85f027.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/d07e22c8b6c8e796106d7db5d5a4bb51b18.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/7a4a8b4b7ce7f5158c28107d4d359f18123.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ba26a50b3c15b7e6f15e2e0c30a6af03df2101e.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/5d979d41d6fa3d32c2b0f44f275f54e7c038c9.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/5eba25f0bed23d4d88a24b4d79d4f30b249b6f.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/5eb83b0fba724d20f8ba4b2a29f14c30b1a0b57.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/f0e3a4cd3e6f83e4c15c93d421dff527f377b8b.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ae9fc188428abda7328a38a5ec2b94e8d908.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/bae02c18408664fa30c086b84d5d7c065e5b8.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/5384e2491e8d875f18f37e2d5bc77887c3b505.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/68fec9d31b736cbf9ef5c3987d3dc6f8a75fb.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/1e59e8f420a65e9e90e99a3d04a659d8c7b0.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/e31017ad0e4d0512d9a90e617e087c6595c2d8.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/e6a047ad8f6e1f0323c784d1d0d382f9a5646ff.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/da4f29eacdc09d6e14a47518b85c3d68f82e.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/d6f29772cad2d94b8c134b27e9192c27c06b60e.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/3c88999e5c845c78ab4fa3f787e84b291e0917f.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/f0c4b4cad8d706b79e5845bc9e0a5f514d3.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/b27c216e34b06579a4fc8aeb7c0feb84ce.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ab39c8a742bc77e5cec8878d6d6d6d6d6d2.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/5d6d43aff9d8c2259fc33d9c78e8d3d7722b.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/1306c629a4d49d4328b8e7d7ce4429b391e096.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/3f810678f9d7a010a15c5e28c7f8b9727b01e8bf.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/c1f4d0937380a820d2531fda5a4a8dd3247.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/9b46d589638b7848d92aaadcd239a2dc2a7d4.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/08227ff5e6a0fa0e9b9eb8a1a8b4d292f462b7fb.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/3ad2d2e4b4a6ce6f38315c281083f3651f88fd.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/08288789739b8b9255ccb6b6d1f6fb94ccc53a8.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/032597953658a49a28cc168b0b6f7c94cc5c1f0.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/a41544729f5bdf0136aae12eb70b90d653671aa.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/2d6c392b0a9d244f8b9aeb0bde4bfe0937a2f9b.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/ec0c05b08a284f08a2b1ac789f43b0842d9bf.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/2b6f3b0a839e84f8eb73e764748ec5e83f4af.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/bac41459566e4cc5f1b2f79d7cd836bc5ffab2b.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/e90a648bd7a81f5c5f92e7749b5ab942aec82e519.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/1196a58d5f1e5f79fe210909b3c546faec2025.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/51c6d39714e6577555dab7de1878c483d076c6.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/d0bffc08b6c4f04f7f49f4f24f12d0b8c65e4326.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/a08394735f48154f29afab24d0388c584140c3.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/8a09875fa01f3bf4fb8aadaac7f378e9b1b0507.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/089ecf07c817865144b6d6e8c8ec8c314d326c.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/42ba677a58c40811e48add81c8e3d8e631526805.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/3282a1cc1a37ce17f6f179a492f57009a7bfd935c.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/307a21ac3a886e18cf6c16ba72101229734e40f89.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/54be3209d0365cc9aceefe54423a50c7d7febfb14.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/357f35b6e8eaela8c2ed1f285812a9922ea734df0.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/824a980c5749490b66c24b6b6e3ddedcdcd99dd1a.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/67bdf94044845d7211c1d4a37b36a83d67bdc715.mp4", "https://befun-static.oss-cn-shenzhen.aliyuncs.com/clip/material/0a88daa56d5345ab3afc1bf975cd21d1953449c25.mp4", "https://befun-static.oss-cn-shenz # 增加num=0的防护逻辑 if num <= 0: return [] # 处理num超过列表长度的情况:最多返回列表所有元素 actual_num = min(num, len(video_urls)) # 随机抽取指定数量的视频(去重) return random.sample(video_urls, actual_num) # 测试代码 if __name__ == "__main__": import asyncio # 测试参数:总时长10秒,需要4个3秒的片段 test_args: Args = { "params": { "duration": 10 } } try: # 适配IPython环境的事件循环执行方式 loop = asyncio.get_event_loop() result = loop.run_until_complete(main(test_args)) print(f"需要的视频片段数量: {len(result['video_urls'])}") print("视频URL列表:") for url in result['video_urls']: print(url) except Exception as e: print(f"测试运行出错: {str(e)}") 这个加入进去
12-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值