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

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

  • 剑指 Offer 46. 把数字翻译成字符串
    • 题目思路
    • 代码
  • 剑指 Offer 48. 最长不含重复字符的子字符串
    • 题目思路
    • 代码

剑指 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<
        }
        //cout<
        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<
            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;
    }
};

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

剑指 Offer第 10 天 动态规划(中等)_第1张图片


你可能感兴趣的:(剑指offer,动态规划,算法,数据结构)