zoukankan      html  css  js  c++  java
  • 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的代表的所有字符的组合;

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

      

  • 相关阅读:
    JAVA日常之三
    java将字符串存入oracle的Blob中
    java连接oracle数据库
    JAVA日常之二
    JAVA日常之一
    linux日常命令之三
    linux日常命令之二
    linux日常命令之一
    Python之路【第四十篇】:django日更
    Python之路【第三十九篇】:django日更
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13222507.html
Copyright © 2011-2022 走看看