又可以拜拜一段时间hhh

这里写目录标题

    • 395. 至少有 K 个重复字符的最长子串
    • 完全平方数
    • 最大数

395. 至少有 K 个重复字符的最长子串

class Solution {
public:
    int longestSubstring(string s, int k) {
        int res=0;
        if(s.size()<k)return 0;
        if(k<=1)return s.size();
        int n=s.size();
        for(int t=1;t<=26;t++){
            int tot=0;//子串中有tot种字母
            vector<int> cnt(26,0);
            int less=0;//尚未满足个数的种数
            int l=0,r=0;
            while(r<n){
                cnt[s[r]-'a']++;
                if(cnt[s[r]-'a']==1){
                    tot++;
                    less++;
                }
               else if(cnt[s[r]-'a']==k){
                    less--;
                }
                while(tot>t){
                    cnt[s[l]-'a']--;
                    if(cnt[s[l]-'a']==0){
                        tot--;
                        less--;
                    }
                    else if(cnt[s[l]-'a']==k-1){
                        less++;
                    }
                    l++;
                }
                if(tot==t&&less==0)res=max(res,r-l+1);
                r++;
            }

        }
        return res;
    }
};

完全平方数

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n+1,n+1);
        dp[0]=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                if(j*j>i)continue;
                dp[i]=min(dp[i],dp[i-j*j]+1);
            }
        }
        return dp[n];
    }
};

最大数

输入:
[3,30,34,5,9]
输出:
“9534303”
预期结果:
“9534330”

class Solution {
public:
   static bool cmp(string s1,string s2){
    //    for(int i=0;i
    //        for(int j=0;j
    //            if()
    //        }
    //    }
       int i=0,j=0;
       while(i<s1.size()&&j<s2.size()){
           if(s1[i]==s2[j])i++,j++;
           else if(s1[i]>s2[j])return true;
           else return false;
       }
       if(i<s1.size())return true;
       else return false;
   }
    string largestNumber(vector<int>& nums) {
        vector<string> v;
        v.clear();
        int n=v.size();
        for(int i=0;i<nums.size();i++){
            string str=to_string(nums[i]);
            v.push_back(str);
        }
        sort(v.begin(),v.end(),cmp);
        string res="";
        for(int i=0;i<v.size();i++)res+=v[i];
        return res;
    }
};

你可能感兴趣的:(算法,数据结构,leetcode)