算法题:Zipper

  • Post author:
  • Post category:其他


题目:

给定三个字符串,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:]))
}



版权声明:本文为simplelovecs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。