当前位置: 首页 > Web前端 > JavaScript

[力扣]131,分割一个回文串

时间:2023-03-27 16:55:07 JavaScript

Topicleetcode131.分割一个回文串参考题解算法学习github地址方法暴力回溯分割一个字符串s,如果切出的子串是回文串,会根据子串结束位置继续切割,直到越界;如果不是,这个分支是错误的。functionisPali(str,start,end){while(start",partition("aab"));一步步分析第一步start=0,i=0,在dfs的这个递归中,取出所有单值,单值必须是回文串;第二步,当start===s.length,temp=['a','a','b']时,此时res加入第一种情况,全单值;第三步,当res加入第一种情况时,第三次调用的dfs递归结束,这时temp会最最后一个值被弹出;奇妙的是,每次dfs递归结束,都会弹出最后一个值;因为在第三次递归结束时start=i=2,传入dfs(temp,i+1)所以res得到第一个结果;dfs递归结束后,弹出temp的最后一个值,此时循环还没有结束,执行i++;因此,i=3导致第二次调用dfs结束,此时再次出栈,即temp的倒数第二个值;此时返回第一次调用的dfs,此时start=i=1,循环执行i++,然后判断之前弹出的两个字符串是否为回文,如果是就在这里输入dfs,在这次start=s.length将添加第二种情况;如果不是,dfs在运行循环结束后第一次调用,并弹出最后一个值。此时start=0;i=1,回到第一步,循环开始切割两三个字符串,判断是否是回文。