1. 动态规划
给出一个字符串str由[a-z]的字符组成,给出一个字符集A,A包含>=1个[a-z]的字符,求str的最短子串,包含字符集A中的所有字符
O(n)的算法
int min = 0;
int pos[sizeof(字符集)];
for i from 0 to strlen(str)-1
do
if (pos[str[i]]是pos中最小值) //如果当前最短子串的第一个字符第二次重复出现,则找到一个
新子串
更新min
else
pos[str[i]] = i; //否则,替换前一个出现的字符位置(也就是位置往后移,这样能保证得到
最短子串)
done
2.
麻将算法,给出一个数组,包含13个0-9的数字,判断是否和牌
和牌的规则是包含一个对,其他为三个相同的数字或连续的数字
我想到的是深度搜索