1 故事开始
之前用gpt4和gemini做个类似的事情,也就是用ai查找2个字串的共同最大子串,现在尝试用阿里云ai助理来完成。
阿里云ai助手所使用的工具和技术:
2 交互过程
原交互截图:
问:
使用DP动态规划算法解决查找两个字串的 最大共同子串的问题,并用golang实现该问题的代码
回答
要使用动态规划(DP)算法解决查找两个字符串的最大公共子串问题,我们可以构建一个二维数组来存储两个字符串在对应位置上的最长公共子串长度。以下是使用Go语言实现的一个示例代码:
package main
import (
"fmt"
)
// maxCommonSubstr 使用动态规划寻找两个字符串的最大公共子串
func maxCommonSubstr(s1, s2 string) string {
m, n := len(s1), len(s2)
dp := make([][]int, m+1)
for i := range dp {
dp[i] = make([]int, n+1)
maxLen := 0
endIndex := 0 // 记录最大公共子串在s1中的结束位置
for i := 1; i <= m; i++ {
for j := 1; j <= n; j++ {
if s1[i-1] == s2[j-1] {
dp[i][j] = dp[i-1][j-1] + 1
if dp[i][j] > maxLen {
maxLen = dp[i][j]
endIndex = i
}
} else {
dp[i][j] = 0
}
}
}
if maxLen > 0 {
return s1[endIndex-maxLen : endIndex]
}
return ""
}
}
func main() {
s1 := "ABCDEF"
s2 := "BABCDEF"
fmt.Println("最大公共子串为:", maxCommonSubstr(s1, s2))
}
这段代码首先初始化了一个(m+1) x (n+1)的二维数组dp,其中m和n分别是两个字符串的长度。
数组dp [i][j]表示字符串s1的前i个字符和字符串s2的前j个字符的最长公共子串的长度。
通过比较字符是否相等,逐步填充这个数组,并记录下最长公共子串的长度和在s1中的结束位置,
最后根据结束位置和最长长度截取出最大公共子串。
- 分析
整体分析思路方向是对的,但是主要的计算函数maxCommonSubstr 并没有正确实现,由于缺乏完整的返回值该代码无法完成编译。
3 纠错交互:
问:我
计算执行函数有语法错误
答:
阿里云 AI 助理找到了4篇相关文档:
配置HTTP触发器并使用HTTP触发 常见问题
当您遇到计算执行函数存在语法错误的情况,这通常会导致函数调用时返回502错误码,错误类型为UnhandledInvocationError1
这意味着您的函数代码中可能存在以下问题:语法错误:检查您的函数代码中是否有拼写错误、缺少分号、不匹配的括号或其他基础的编程语法问题。 运行时异常:代码在执行过程中可能遇到了未被捕获的异常,比如空指针访问、除以零等错误。 非HTTP入口函数被HTTP请求调用:如果您尝试通过HTTP触发器调用一个没有设计为处理HTTP请求的函数,也会导致此错误。
...
原交互分析
可以看出并没有保持上下文连贯的语境,答非所问。
4 小结
本文介绍尝试用阿里云AI助手找两字符串的最长公共子串,提供的Go代码因缺失完整返回值而无法编译。初次交互中,询问动态规划算法及Go实现,回答给出了基本框架但存在缺陷。后续纠错时,AI回复了无关文档链接,未能解决问题。整个过程显示AI理解与响应不够准确连贯。