剑指 Offer第 10 天 动态规划(中等)

剑指 Offer 46. 把数字翻译成字符串

题目思路

就是判断相邻两个数能不能组成一个数,然后利用dp关系推断

代码

class Solution {
    
    
private:
    int dp[100];
    string s;
public:
    int translateNum(int num) {
    
    
        s = to_string(num);
        int n=s.length();
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=n;i++){
    
    
            int t=(s[i-2]-'0')*10+s[i-1]-'0';
            if(t>=10&&t<=25){
    
    
                dp[i]=dp[i-1]+dp[i-2];
            }else{
    
    
                dp[i]=dp[i-1];
            }
            //cout<<dp[i]<<" ";
        }
        //cout<<s<<endl;
        return dp[n];
    }
};

剑指 Offer 48. 最长不含重复字符的子字符串

题目思路

这个可以用队列进行做,参考滑动窗口这个题目,不断进行加数取数,更新结果

代码

class Solution {
    
    
public:
    int lengthOfLongestSubstring(string s) {
    
    
        int n=s.length();
        int l=0,r=0;
        int vis[200]={
    
    0};
        char s1[40010];
        int len=0;
        for(int i=0;i<n;i++){
    
    
            //cout<<i<<" "<<s[i]<<" "<<vis[s[i]]<<endl;
            if(!vis[s[i]]){
    
    
                s1[r]=s[i];
                vis[s[i]]=1;
                r++;
            }else{
    
    
                while(l<r&&vis[s[i]]){
    
    
                    vis[s1[l]]=0;
                    l++;
                }
                s1[r]=s[i];
                vis[s[i]]=1;
                r++;
            }
            len = max((r-l),len);
        }
        return len;
    }
};

这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_46627433/article/details/123100610