冲刺大厂每日算法&面试题,动态规划21天——第十九天
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冲刺大厂每日算法&面试题,动态规划21天——第十九天相关的知识,希望对你有一定的参考价值。
导读
肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。我们先来搞一下让大家最头疼的一类算法题,动态规划我们将进行为时21天的养成计划。还在等什么快来一起肥学进行动态规划21天挑战吧!!
21天动态规划入门
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:
如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T
的子序列。在这种情况下,你会怎样改变代码?
示例 1:
输入:s = "abc", t = "ahbgdc"
输出:true
示例 2:
输入:s = "axc", t = "ahbgdc"
输出:false
class Solution
public boolean isSubsequence(String s, String t)
int n = s.length(), m = t.length();
int[][] f = new int[m + 1][26];
for (int i = 0; i < 26; i++)
f[m][i] = m;
for (int i = m - 1; i >= 0; i--)
for (int j = 0; j < 26; j++)
if (t.charAt(i) == j + 'a')
f[i][j] = i;
else
f[i][j] = f[i + 1][j];
int add = 0;
for (int i = 0; i < n; i++)
if (f[add][s.charAt(i) - 'a'] == m)
return false;
add = f[add][s.charAt(i) - 'a'] + 1;
return true;
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。
一个字符串的 子序列
是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列
是这两个字符串所共同拥有的子序列。
示例 1:
输入:text1 = "abcde", text2 = "ace"
输出:3
解释:最长公共子序列是 "ace" ,它的长度为 3 。
示例 2:
输入:text1 = "abc", text2 = "abc"
输出:3
解释:最长公共子序列是 "abc" ,它的长度为 3 。
示例 3:
输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0 。
class Solution
public int longestCommonSubsequence(String text1, String text2)
int m = text1.length(), n = text2.length();
int[][] dp = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++)
char c1 = text1.charAt(i - 1);
for (int j = 1; j <= n; j++)
char c2 = text2.charAt(j - 1);
if (c1 == c2)
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
return dp[m][n];
面试题
继续二叉树的内容:
今天来讲怎么判断是否为完全二叉树,首先回顾一下什么叫完全二叉树。为了增强大家的记忆能力,我们将完全二叉树和满二叉树对比记忆:
所以简单来说:
完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数, 第 h 层所有的结点都连续集中在最左边
满二叉树:深度为k且有2^k-1个结点的二叉树称为满二叉树
package tree;
import java.util.LinkedList;
import java.util.Queue;
public class completeTree
//判断是否为完全二叉树
public boolean isCompleteTree(node root)
if(root==null)return false;
Queue<node> queue=new LinkedList<node>();
queue.add(root);
boolean NoChild=false,result=true;
while(!queue.isEmpty())
node current=queue.remove();
if(NoChild)
if(current.left!=null||current.right!=null)
result=false;
break;
else
if(current.left!=null&¤t.right!=null)
queue.add(current.left);
NoChild=true;
else if(current.left!=null&¤t.right==null)
queue.add(current.left);
NoChild=true;
else if(current.left==null&¤t.right!=null)
result=false;
break;
else
NoChild=true;
return result;
特别介绍
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
📣这是个面试和考研的算法练习我们一起加油上岸之路
点击直接资料领取
这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。
以上是关于冲刺大厂每日算法&面试题,动态规划21天——第十九天的主要内容,如果未能解决你的问题,请参考以下文章