提供两个字符串，找出它们的最长公共子序列，并输出长度。

string1 = "ABCDGH"
string2 = "AEDFHR"
def longest_common_subsequence(string1, string2):
"""Find and return the longest common subsequence of the two strings provided."""
# TODO: write code to find the longest common subsequence
该函数的实现方式是动态规划。以下是实现代码：

```
def longest_common_subsequence(string1, string2):
    m = len(string1)
    n = len(string2)
    # 构造动态规划的二维数组
    dp = [[0]*(n+1) for _ in range(m+1)]
    # 填充dp数组
    for i in range(1, m+1):
        for j in range(1, n+1):
            if string1[i-1] == string2[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
            else:
                dp[i][j] = max(dp[i-1][j], dp[i][j-1])
    # dp[m][n]即为最长公共子序列的长度
    return dp[m][n]
```

使用该函数，可以得到字符串 "ABCDGH" 和 "AEDFHR" 的最长公共子序列长度为 2，即 "AD" 或 "AH"。