剑指 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;
}
};
这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~