网站的建设与维护工资代码网站建设
web/
2025/9/29 19:57:39/
文章来源:
网站的建设与维护工资,代码网站建设,网络安全管理平台,泉州建网站假设有a#xff0c;b两个字符串#xff0c;现对a字符串进行修改使得a字符串与b字符串完全一样#xff1b;要求是使用最小的操作次数#xff0c;使a#xff0c;b字符串相等。操作有三种#xff0c;分别是插入一个字符#xff0c;删除一个字符#xff0c;替换一个字符。 …假设有ab两个字符串现对a字符串进行修改使得a字符串与b字符串完全一样要求是使用最小的操作次数使ab字符串相等。操作有三种分别是插入一个字符删除一个字符替换一个字符。
假设 a字符串内容为horse b字符串内容为rose
解题思路 枚举a字符串的所有子串转换到b字符串的所有子串的编辑情况
a:[ h o r s e ]↑ib:[ r o s e ]↑j目测将horse 编程rose需要2次操作 将h替换成r将第二个r删掉。
该题的重复子过程如下 a:horse – b:rose
转换操作次数步骤a:h - b:r1次操作将h替换成ra:h - b:ro2次操作将h替换成r插入oa:h - b:ros3次操作将h替换成r插入o插入sa:h - b:rose4次操作将h替换成r插入o插入s插入e
转换操作次数步骤a:ho - b:r2次操作将h替换成r将o删除a:ho - b:ro1次操作将h替换成ra:ho - b:ros2次操作将h替换成r插入sa:ho - b:rose3次操作将h替换成r插入s插入e
转换操作次数步骤a:hor - b:r2次操作删除h删除oa:hor - b:ro2次操作将h替换成r将第二个r删除a:hor - b:ros2次操作将h替换成r将第二个r替换成sa:hor - b:rose3次操作将h替换成r将第二个r替换成s插入e
转换操作次数步骤a:hors - b:r3次操作删除h删除o删除sa:hors - b:ro3次操作将h替换成r将第二个r删除删除sa:hors - b:ros2次操作将h替换成r将第二个r删除a:hors - b:rose3次操作将h替换成r将第二个r删除插入e
转换操作次数步骤a:horse - b:r4次操作删除h删除o删除s删除ea:horse - b:ro4次操作将h替换成r将第二个r删除删除s删除ea:horse - b:ros3次操作将h替换成r将第二个r删除删除ea:horse - b:rose2次操作将h替换成r将第二个r删除
从a字符串视角每一组操作都可以在前一个字符的基础上去删除插入替换。 即 对horse的决策可以从对hors的决策推断出 对hors的决策可以从对hor的决策推断出 对hor的决策可以从ho的决策推断出 对ho的决策可以从对h的决策推断出 对h的决策可以从对空集的决策推断出
这明显的包含了重复的子过程有重复的子过程动态规划走起
将表格转换成另一种形式
‘’rose‘’01234h11234o22123r32223s43323e54432
可见horse - rose的转换操作最少次数为2 e-e无需转换 s-s无需转换 hor-ro需要转换2次是从ho-o状态流转过来的 ho-o需要转换1次 h-r需要转换1次 所以总共需要转换2次 #mermaid-svg-K9cvd9dt875sHNVk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-K9cvd9dt875sHNVk .error-icon{fill:#552222;}#mermaid-svg-K9cvd9dt875sHNVk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-K9cvd9dt875sHNVk .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-K9cvd9dt875sHNVk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-K9cvd9dt875sHNVk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-K9cvd9dt875sHNVk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-K9cvd9dt875sHNVk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-K9cvd9dt875sHNVk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-K9cvd9dt875sHNVk .marker.cross{stroke:#333333;}#mermaid-svg-K9cvd9dt875sHNVk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-K9cvd9dt875sHNVk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-K9cvd9dt875sHNVk .cluster-label text{fill:#333;}#mermaid-svg-K9cvd9dt875sHNVk .cluster-label span{color:#333;}#mermaid-svg-K9cvd9dt875sHNVk .label text,#mermaid-svg-K9cvd9dt875sHNVk span{fill:#333;color:#333;}#mermaid-svg-K9cvd9dt875sHNVk .node rect,#mermaid-svg-K9cvd9dt875sHNVk .node circle,#mermaid-svg-K9cvd9dt875sHNVk .node ellipse,#mermaid-svg-K9cvd9dt875sHNVk .node polygon,#mermaid-svg-K9cvd9dt875sHNVk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-K9cvd9dt875sHNVk .node .label{text-align:center;}#mermaid-svg-K9cvd9dt875sHNVk .node.clickable{cursor:pointer;}#mermaid-svg-K9cvd9dt875sHNVk .arrowheadPath{fill:#333333;}#mermaid-svg-K9cvd9dt875sHNVk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-K9cvd9dt875sHNVk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-K9cvd9dt875sHNVk .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-K9cvd9dt875sHNVk .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-K9cvd9dt875sHNVk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-K9cvd9dt875sHNVk .cluster text{fill:#333;}#mermaid-svg-K9cvd9dt875sHNVk .cluster span{color:#333;}#mermaid-svg-K9cvd9dt875sHNVk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-K9cvd9dt875sHNVk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} h r ho ro hor horse rose 换一种理解方式 有两个字符串ab 若这两个字符串最后一个字符已经相同则将a转换到b只需要考虑a去掉最后一个字符和b去掉最后一个字符这两个字符串。
a:[ |x]
b:[ |x]如果 a[i-1] 与 b[j-1] 的值相等 只需要考虑编辑a[i-1]b[j-1]之前的字符即可 若ab字符串最后一个字符不同
a:[ |x]
b:[ |y]则有三种情况
a删除最后一个字符后的字符串与b高度重合a向末尾插入一个字符后的字符串与b高度重合a替换最后一个字符后的字符串与b高度重合
如果 a[i-1] 与 b[j-1] 的值相等 只需要考虑编辑a[i-1]b[j-1]之前的字符即可
否则 (潜台词 a[i-1] 与 b[j-1] 的值不相等 )考虑删除a的一个字符考虑向a的末尾插入一个字符考虑替换a末尾的字符 假设我们有一张二维表已经缓存过horse 到 rose 转换的部分步骤信息即可根据以往的信息推测出下一步的转换计划此题考查最少的转换步骤代码如下
package mainimport (fmt
)func main() {a : horseb : rose//fmt.Scan(a)//fmt.Scan(b)dp : make([][]int, len(a)1)for i : 0; i len(a)1; i {dp[i] make([]int, len(b)1)}for i : 0; i len(a)1; i {dp[i][0] i}for j : 0; j len(b)1; j {dp[0][j] j}for i : 1; i len(a); i {for j : 1; j len(b); j {if a[i-1] b[j-1] {dp[i][j] dp[i-1][j-1]} else {dp[i][j] min3(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) 1}}}fmt.Println(dp[len(a)][len(b)])
}func min3(a, b, c int) int {return min(min(a, b), c)
}func min(a, b int) int {if a b {return a}return b
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84072.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!