Re: [问题] Google Interview Question (1)

楼主: pnpncat (meow)   2013-03-29 16:49:15
※ 引述《RockLee (Now of all times)》之铭言:
: 原始网址:
: http://www.careercup.com/question?id=14539805
: 题目:
: Three strings say A, B, C are given to you.
: Check weather 3rd string is interleaved from string A and B.
: Ex: A="abcd" B="xyz" C="axybczd". answer is yes. o(n)
: 用 Dynamic Programming 应该可在 O(n^2) 的时间内解决
: 但要在 O(n) 的时间内解决就想不出来了 Orz...
: CareerCup 上的讨论看来都无法在 O(n) 的时间内正确的解决
: 不知道板上有没有人有什么 idea?
这题不能直接这样做吗?
1. 将A, B, C分别放进stackA, stackB, stackC
2. 以下列函数判别答案是否为真
bool foo() {
while ( stackC is not empty ) {
if ( top of stackC == top of stackA ) {
pop stackC;
pop stackA;
} else if (top of stackC == top of stackB ) {
pop stackC;
pop stackB;
} else {
return false;
}
}
return true;
}
作者: flere (人间失格)   2013-03-29 18:05:00
当top stack of C跟top A,B一样的时候,无法判断pop哪一个stack才会是正确的~
楼主: pnpncat (meow)   2013-03-29 21:12:00
咦@@ 是这样吗? 不是随便pop哪一个都一样吗? 我把code里面的A B对调 应该还是会得到同样的结果吧
作者: flere (人间失格)   2013-03-29 21:21:00
A=ab,B=ac,C=acab,你看到第一个a的时候,如果popA的a的话等等看到c就会找不到对应的了(还是我误会了吗??XDD
楼主: pnpncat (meow)   2013-03-29 21:21:00
了解了^^"是我想错XD等等 不对啊 这样等下会找到c啊...........那时候c就在stackB上面不是吗?我刚重想了一下 这算法应该是没错的 就跟没有盖牌的接龙道理一样 不可能会接不起来吧
作者: flere (人间失格)   2013-03-29 22:03:00
可是这时候stackB最上面会是a耶,如果你说最上面会是c的话,那我改成A=ba,B=ca,C=baca因为pop a同时有两个stack符合,所以会不确定pop哪个stack才对~
楼主: pnpncat (meow)   2013-03-29 23:46:00
确实耶@@ 虽然直接用A往下搜到完也能解 但就不是O(n)了...看来还是要多用一个容器 把没有match的依序存起来才行
作者: ledia (付出不需要理由)   2013-03-31 02:12:00
"accc", "bcbc", "abcccbcc"
楼主: pnpncat (meow)   2013-03-31 22:54:00
看来是我把它想得太简单了@@

Links booklink

Contact Us: admin [ a t ] ucptt.com