【2020.5.14今日编程】LeetCode 198. 打家劫舍 + LeetCode 面试题19. 正则表达式匹配

LeetCode 198. 打家劫舍

简单

  • 题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
    给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

  • 示例

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

  • 方法:动态规划(万年DP)。反正题目的意思就是不能连着两天偷窃,那么我们可以找到动态规划的状态方程:
    dp[ i ] = max(dp[ i - 1] , dp[ i - 2] + nums[ i ]
    (LeetCode上打家劫舍还有II 和III,之后再做)
  • cpp代码实现
class Solution
{
     
	public:
	int rob(vector<int>& nums) 
	{
     
		if(nums.empty())
			return 0;
		if(nums.size() == 1)
			return nums[0];
		if(nums.size() == 2)
			return max(nums[0], nums[1]);
		vector<int>dp(nums.size());
		dp[0] = nums[0];
		dp[1] = max(nums[0], nums[1]);
		for(int i = 3; i < nums.size(); ++i)
			dp[i] = max(sp[i - 1], dp[i - 2] + nums[i]);
		return dp[nums.size() - 1];
	}
};

LeetCode 面试题19. 正则表达式匹配

困难

  • 题目:请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。

  • 示例

输入:
s = “aa”
p = “a”
输出: false
解释: “a” 无法匹配 “aa” 整个字符串。

输入:
s = “aa”
p = “a*”
输出: true
解释: 因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。因此,字符串 “aa” 可被视为 ‘a’ 重复了一次。

输入:
s = “ab”
p = “."
输出: true
解释: ".
” 表示可匹配零个或多个(’*’)任意字符(’.’)。

输入:
s = “aab”
p = “cab”
输出: true
解释: 因为 ‘*’ 表示零个或多个,这里 ‘c’ 为 0 个, ‘a’ 被重复一次。因此可以匹配字符串 “aab”。

  • 方法:动态规划。
  • cpp代码实现
    [等我学会了再写实现]

写在最后
今天是助教上线的一天也是学习LeetCode中hard难度的题型的一天,我真的太难了,因为我太笨了,脑子转不过来弯,这道题我可能还要看个好几天,啊啊啊啊,我只能坚信“勤能补拙”了!!!再一次,今天又是没有开学通知的一天,学校也不知咋想的,反正我很羡慕别人的学校就是了~~~~明天要去和小姐妹玩了,我太期待了,期待了好多天的那种,变成了一只小狐狸,嘻嘻嘻····

你可能感兴趣的:(leetcode,正则表达式)