Day 15

第718题:

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。(来自LeetCode)

1、肯定可以使用暴力求解,将A和B中的所有子串相比较,来算处它们的最大前缀的长度,就可得出公共子数组的长度了,时间复杂度较高

  看到提示说用dp[i][j]数组来记录此时可A和B数组当前的最大公共长度;

  就是说当此是 i 和 j 指向的位置如果相同的话,那么此时dp[i][j]的值就位dp[i-1][j-1]的值+1,因为公共的长度添加了一个;

  但是如果此时指向的位置不相同的话,那么就设置dp[i][j]为0,因为公共长度此时没有了;

  中间需要用一个res来保存当前的最长公共长度。

  

 2、滑动窗口的方式:将A数组的头部依次和B数组的任意位置对齐,比较此时的最长公共子串;

          将B数组的头部依次和A数组的任意位置对其,比较此时的最长公共子串;

         (其实就是相当于将A的头部和尾部依次和B数组的任意位置对其,比较最长字串长度)

  最终返回最长的子串长度。

  

第17题:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。(来自LeetCode)

1、2-9每个数字代表一串字符串,给定的字符串可以是1-9个,当是一个时,将其代表的字符串内的字符依次推入集合在输出即可;

  但是如果数字是9个时,就代表9个字符串内地字符任意组合,组合较多,如果用循环的话,就相当于要9次循环,这里可以用递归解决;

  首先用数组或者集合来存储数字和字符串的对应关系;

  只有当号码的最后一位为空时才结束;例如23456

  当得到第一个号码数字2时,取出对应的字符串abc,然后取出字符串内的第一个字符a;

  此时开始递归下一个号码数字3,依次下去,这样首先得出来的就是2345的代表的字符串的首字符和6代表的所有字符的组合;

  然后再返回到5代表的第二个字符,再得出来234的首字符加上5的第二个字符和6的代表的所有字符的组合;

  这样一次递归下去,得出所有的字符组合。

  

posted @ 2020-07-02 00:31  Liang-Yi  阅读(76)  评论(0编辑  收藏  举报