leetcode双指针(python与c++)
生活随笔
收集整理的這篇文章主要介紹了
leetcode双指针(python与c++)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.字符串的排列
思路:雙指針+滑動窗口
python:
class Solution:def checkInclusion(self, s1: str, s2: str) -> bool:dict_={}for i in s1:dict_[i] = dict_.get(i,0)+1# # print('==dict_:',dict_)left,right =0,0length = 0minlen = float('inf')res = ''while right<len(s2):# 向右拓展if s2[right] in dict_:if dict_[s2[right]]>0:#注意要進(jìn)行判斷避免重復(fù)字符length+=1dict_[s2[right]]-=1while length==len(s1):#包含了子串啦 這個時候左邊要壓縮if right-left+1==len(s1):#找最短的return Trueleft+=1if s2[left-1] in dict_:#注意left+1啦 所以要用left-1的字符判斷是否出現(xiàn)在dict_中dict_[s2[left - 1]] += 1if dict_[s2[left-1]]>0:#避免重復(fù)字符造成的減法length-=1right+=1return Falsec++:?
class Solution { public:bool checkInclusion(string s1, string s2) {map<char,int> dict_;for (int k=0;k<s1.size();k++){dict_[s1[k]]++;}// map <char,int>::iterator itor = dict_.begin(); // //debug// for(;itor!=dict_.end();itor++)// {// cout<<itor->first<<" "<<itor->second<<endl;// } int right=0;int left=0;int remain_legth =0;while (right<s2.size()){ // cout<<"=dict_[s2[right]:"<<dict_[s2[right]]<<endl;if(dict_[s2[right]]>0){remain_legth+=1;}dict_[s2[right]]-=1;while(remain_legth==s1.size()){if(right-left+1==s1.size()){return true;} left+=1;dict_[s2[left-1]]+=1; if (dict_[s2[left-1]]>0){remain_legth-=1;}}right+=1;}return false;} };總結(jié)
以上是生活随笔為你收集整理的leetcode双指针(python与c++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中的自定义类型
- 下一篇: leetcode动态规划(python与