把数字翻译成字符串
动规五部曲:
确定dp数组及其下标
到s[i]为止,最多有dp[i]种翻译方法
递推关系式
类似于爬楼梯,只不过要进行判断,不大于26才能选择爬一层或者爬两层
dp数组的初始化
dp[0]=dp[1]=1
确定遍历顺序
从前往后遍历
举例验证dp数组
其中int与string的转化,以及char与int的转化
class Solution {
public:
int translateNum(int num) {
//将int转化为string,这样才能更方便的取各个数
string s=to_string(num);
int length=s.size();
if(length==1) return 1;
//初始化dp数组
//dp[i]表示以s[i-1]结尾的字符串有dp[i]种翻译方法
vector<int> dp(length+1,1);
for(int i=2;i<=length;i++)
{
//将char型转化为int
//s[i]可以与s[i-1]组成一个字母
if(s[i-1]-'0'<=5&&s[i-2]-'0'==2||s[i-2]-'0'==1) dp[i]=dp[i-1]+dp[i-2];
else dp[i]=dp[i-1];
}
return dp[length];
}
};
最长不含重复字符的子字符串
双指针,判断有无重复的字符串,用unordered_map判断,滑动窗口。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> window;
int left=0,right=0;
int result=0;
while(right<s.size())
{
char c=s[right];
right++;
window[c]++;
while(window[c]>1)
{
char d=s[left];
left++;
window[d]--;
}
result=max(result,right-left);
}
return result;
}
};