我去面试,boos 给出了个。动态规划的题目:

‘’‘’‘’

A = "asdf"
B = "axazxcv" S = "axasazdxfcv" 字符串A 和 字符串B A 和 B 拆散组合成 S。 但是相对位置上不能变。
判断 S 这个字符串,是否是由 AB 组成并且 相对位置不变, 如果是 返回Ture 否则False ##注:A串 和 B串。 是有重复的的字符的。 暂且忽略特殊字符的问题。
例:
  A = "asdf"
  B = "axazxcv"
  S = "axasazdxfcv"
  return Ture
  =============================================
  A = "asdf"
  B = "axazxcv"
  S = "xaasazdxfcv"
  return False

初一判断 我当时的想法完全是错的。  以下的是回家的路上想到的。

1. 因为重复的问题,所以就不能单单的只靠 一个字符单纯的判断, S串中的某一个字符, 是属于A的还是属于B的。

2. 所以一定是 S 的当前,某一个字符时,要判断一下 他前面的那个字符,是A的还是B的。

可以这样去理解:

A 表示为 A[0:i]      B 表示为 B[0:j]

S[0:i+j]   ==   A[0:i] + B[0:j] 的组合   ##(这里不是字符串拼接,)

然后状态的转移公式:  f(i,j) = (f(i-1,j) and A[i-1]==c[i+j-1]) or f(i,j-1) and B[i-1]==S[i+j-1])

A = "asdf"
B = "axazxcv" S = "axasazdxfcv" def static(A, B, S):
if len(A+B) != len(S): # 首先判断 两个的长度,是否相同。
return False
a = len(A)+
b = len(B)+1
   # 初始化二维列表。
li = [[[] for _ in range(a)] for _ in range(b)]
li[][] = True
for i in range(, a):
li[][i] = li[][i-] and A[i-] == S[i-] for j in range(, b):
li[j][] = li[j-][] and B[j-] == S[j-]
  # 以上两部做的事情 可以看下面的图:
  # 这里才是开始计算
for i in range(, a):
for j in range(, b):
li[j][i] = (li[j][i-] and A[i-] == S[i+j-]) or (li[j-][i] and B[j-] == S[i+j-]) for n in li:
print(n)
return li[j][i]

以下是 运行的结果。


print(static(A, B, S))

[True, True, False, False, False]
[True, False, False, False, False]
[True, True, True, False, False]
[True, False, True, False, False]
[False, False, True, True, False]
[False, False, False, True, True]
[False, False, False, False, True]
[False, False, False, False, True]
True
           a      s     d      f   
  [True, True, False, False, False]
a [True, [], [], [], []]
x [True, [], [], [], []]
a [True, [], [], [], []]
z [False, [], [], [], []]
x [False, [], [], [], []]
c [False, [], [], [], []]
v [False, [], [], [], []] # 这里就是判断出S这个字符串的 前A的长度位上,于A有几个相同,显示在 第一行。
# 前B 长度上,与B有几个相同。 显示在一列上。
# 通过这个 应该就能看出, S这个字符串第一个位置上的字符, 是和 A 相同还是 B相同。 我的例子上,是两个都相同 然后接下来就是 不好理解的地方了。
从 S 这个字符串第二个索引的位置开始,判断一下这个位置上的字符,是来自A[0-i]的某一个,还是来自B[0-j]的某一个。并且要与前一个字符进行比较。
比如:
  S的第二个字符x 他是属于B这个串的,B这个串中 a 字符的位置是在,数组中li[j][i-1]的这一行中。所以 A[i-1] == li[j][i-1] or B[j-1] == li[j-1][i] 返回的就使false
  但是 如果是 以下这种情况呢?
    A = "nsdf"
    B = "axazxcv"
    S = "anxsazdxfcv"
  S的第二个字符n 他是属于A这个串的,A这个串中 n 字符的位置是在,数组中li[j][i-1]的这一行中。所以 A[i-1] == li[j][i-1] or B[j-1] == li[j-1][i] 返回的就使Ture
A[i-1] == li[j][i-1] 判断 S 的当前某个字符, 和这个字符的前一个字符是不是 属于A这个字符串的。
B[j-1] == li[j-1][i] 判断 S 的当前某个字符, 和这个字符的前一个字符是不是 属于B这个字符串的。

问题的关键就是,把他理解成, 将 A 这个字符串拆散,然后随机的插入到了 B这个串的某一个位置上。
然后 我们循环 去确定S这个串上的每一个字符, 与 A或者B 对应位置上的某个字符相等。再加上与前面结果的 比较。 只有前面的是 Ture的情况下,S的当前
的某个字符,才能够是Ture。 否则就是 False。

这样 一级一级的判断下去,到最后一个的时候,如何使Ture 那个整个字符串就是 匹配的, 否则就是不匹配。

我也不知道解释的是不是到位, 如果那位大佬心情好的话,看到了这个解释。 请跟我讲一讲其中的原委。 感激不尽。

北京望京SOHO-电商墨镜面试题的更多相关文章

  1. 电商项目面试题 及mysql面试题 太难没啥用

    需要按照功能点把系统拆分,拆分成独立的功能.单独为某一个节点添加服务器.需要系统之间配合才能完成整个业务逻辑.叫做分布式.集群:同一个工程部署到多台服务器上.优点:1.把模块拆分,使用接口通信,降低模 ...

  2. 日本电商Rakuten:最凶猛的国际扩张者

    这是普及社(puji-she)第五篇关于电商开放平台的文章,今天关注日本的Rakuten,它是一家综合性的企业,核心业务包括电子商务.旅游.信用 及支付.金融证券.新闻门户等.本文关注Rakuten的 ...

  3. 电商平台如何接入快递鸟电子面单API?

    快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流.物流金融.在线下单等服务,解决电商的物流管理模块和金融模块.现就对快递鸟电子面单API做基本描述, ...

  4. VR全景:电商巨头的角逐

    VR全景智慧城市:京东推"京东梦"挑战淘宝Buy+ ,VR购物谁主沉浮? VR全景智慧城市是国内首家商业全景平台,结合先进VR虚拟现实技术,以线下实体为依托,将空间还原到线上,用户 ...

  5. 【Tableau】电商广告投放的地域分析

    分析师的职责是利用处理数据获取信息,提炼规律,帮助企业正确决策业务方向. 所以,一个好的分析师绝不能被数据所困,既要深入业务,理解业务,也要高瞻远瞩,以领导者的思维借助数据分析的辅助做出判断. [结构 ...

  6. Java生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案

    Java生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案 说明:Java开源生鲜电商中OMS订单系统中并发问题和锁机制的探讨与解决方案: 问题由来     假设在一个订单系统中(以火车票 ...

  7. L05 Laravel 教程 - 电商实战

    https://laravel-china.org/courses/laravel-shop https://laravel-china.org/topics/13206/laravel-shop-c ...

  8. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  9. 未来京东真能成为中国第一大B2C电商平台吗?

    ​     2月10日,京东集团在北京举行2017年"科技引领未来"开年年会.在本届年会上,京东宣布全面向技术转型.京东集团CEO刘强东正式对外公布未来12年的战略:在以人工智能为 ...

随机推荐

  1. 白鹭引擎EUI做H5活动 入门篇

    前言:本学习文档的目的是为了实现h5,或者简单的h5游戏,比如说,我们要实现一个可以左右,或者上下移动的场景的h5,在场景移动的过程中,会有相应的动画或者操作,我们通过 js 也可以实现,但是为了流畅 ...

  2. Linux top常用操作

    是否显示task和cpu行:t 是否显示内存信息行:m 切换信息区域单位:E 切换任务区域单位:e 显示各个CPU单独的数据: 按某列排序: M(内存) P(CPU) N(PID) T(TIME+) ...

  3. ETL-拉链算法-1

    参考链接:http://blog.csdn.net/nisjlvhudy/article/details/8559518 自己的理解: 主要针对数据的状态变化 表:原表:source 目标表:targ ...

  4. mongoRepository 支持的所有接口

    与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoReposito ...

  5. IP输出 之 ip_local_out

    概述 将要从本地发出的数据包,会在构造了ip头之后,调用ip_local_out函数,该函数设置数据包的总长度和校验和,然后经过netfilter的LOCAL_OUT钩子点进行检查过滤,如果通过,则调 ...

  6. jstack+jdb命令查看线程及死锁堆栈信息

    如果程序挂死,有时使用jstack查看进程中线程信息时,需要添加上-F参数,此时如果有死锁信息,则可能不会打印出死锁堆栈信息,使用jdb则可以查看当前死锁线程的运行堆栈. 如下模拟一个简单的死锁程序 ...

  7. XAMPP是什么?

    XAMPP=Apache + MySQL + PHP + Perl,是一个完全免费,易于安装和使用Apache发行版,包含了Apache.MySQL.PHP和Perl.支持Windows.Linux和 ...

  8. LC 163. Missing Ranges 【lock, hard】

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

  9. tensorflow文件读取

    1.知识点 """ 注意:在tensorflow当中,运行操作具有依赖性 1.CPU操作计算与IO计算区别: CPU操作: 1.tensorflow是一个正真的多线程,并 ...

  10. 整型,长整型,无符号整型等 大端和小端(Big endian and Little endian)

    一.大端和小端的问题 对于整型.长整型.无符号整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian ...