您的位置:首页 > 其它

算法题:Zipper

2016-04-26 17:30 288 查看

题目:

POJ 2192: http://poj.org/problem?id=2192

给定三个字符串,A,B,C。A和B的长度和等于C。判断字符串C能否由字符串A、B中的字符组成。要求,原来A 和 B 中的字符作为C中的字符时,还必须保持字符在原串中的顺序。

例如:

cat tree tcraete

cat tree catrtee

cat tree cttaree

Data set 1: yes
Data set 2: yes
Data set 3: no

思路:

最简单的使用递归法解决。假设 A中的前 i 个字符 和 B 中的前 j 个字符 可以构成 C中的前 i+j个字符。那么 如果A中的前 i+1 个字符和B中的前 j 个字符可以构成 C 中的前 i+j+1 个字符 或者 如果A中的前 i 个字符和B中的前 j+1 个字符可以构成 C 中的前 i+j+1 个字符。那么显然 C 中的前 i+j+1 个字符可由字符串A 和 字符串 B 中的前
i+j+1 个字符构成。

Golang:

func Zipper(a, b, c string) bool {
if len(a) == 0 {
return b == c
}

if len(b) == 0 {
return a == c
}

return (a[0] == c[0] && Zipper(a[1:], b, c[1:]))
|| (b[0] == c[0] && Zipper(a, b[1:], c[1:]))
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: