才仁代吉

lintcode 四道题


我们考虑对每个字符进行两边扩展,寻找回文串,并记录长度。有两种情况,一种是bab,从a向两边扩展,一种abba,从bb中间向两边扩展。
dp[i][j] 表示子串s[i…j]是否是回文
初始化:dp[i][i] = true (0 <= i <= n-1); dp[i][i-1] = true (1 <= i <= n-1); 其余的初始化为false
dp[i][j] = (s[i] == s[j] && dp[i+1][j-1] == true)
在动态规划中保存最长回文的长度及起点即可

找最大正方形的边长,动态规划,每个点能否构成正方形,
考虑matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j],如果三者均大于0,
则可以构成正方形,构成正方形的变长是三者中最小值加1,遍历的同时统计最大值。
注意返回平方才是面积。


算法是将罗马数字转换为整数,思路如下:比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1>  刚开始时,temp = 0; 遍历当前遍历到第一个X,则temp == 0 < 10 == X ,则res = 10;temp = 10;2> 继续向前遍历,又遇到X,此时temp == 10 = 10 == X,则 res = res + 10;即res = 20; temp = 10;3> 继续向前遍历,遇到I,此时temp == 10 > 1 == I; 则 res = res - 1; 即res = 19; temp = 1;循环终止;



选择排序:取首元素,同其后所有的元素一一比较,
若大就交换。一轮之后,
首元素有序,之后在重复。
从后往前找,找到第一对(i,j),使得nums[i]<num[j],
然后将两者兑换后,后面部分排序
703173830925-1464579923.png)

posted on 2017-06-07 16:27  才仁代吉  阅读(96)  评论(0)    收藏  举报

导航