算法题:Zipper

题目:

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:]))
}



你可能感兴趣的:(算法,Golang)