笔试——Day12
文章目录
- 第一题
- 题目
- 思路
- 代码
- 第二题
- 题目:
- 思路
- 代码
- 第三题
- 题目:
- 思路
- 代码
第一题
题目
删除公共字符

思路
模拟:
遇到需要删除的字符,则不添加到结果中
代码

第二题
题目:
两个链表的第一个公共结点

思路
模拟:
- 先计算两个链表的长度
- 再让长的先走差值步
- 最后同时走,走到结束,如果没有相遇则为空
代码

第三题
题目:
mari和shiny

思路
动态规划——多状态的线性 dp
状态表示:
s[i]表示:字符串[0, i]中,有多少个sh[i]表示:字符串[0, i]中,有多少个shy[i]表示:字符串[0, i]中,有多少个shy状态转移方程:
s[i]:
str[i] == 's',s[i - 1] + 1str[i] != 's',s[i - 1]
h[i]:
str[i] == 'h',s[i - 1] + h[i - 1]str[i] != 'h',h[i - 1]
y[i]:
str[i] == 'y',h[i - 1] + y[i - 1]str[i] != 'y',y[i - 1]结果返回:
y[n - 1]
优化
我们发现只有当当前字符为有效时(即shy),才会相加,否则等于之前的值;
s:当前's'的数量h:当前'sh'子序列的数量y:当前'shy'子序列的数量
代码

