您的位置:首页 > 汽车 > 时评 > 宜昌做网站的公司_莱芜吧百度贴吧_推广百度百科_买外链网站

宜昌做网站的公司_莱芜吧百度贴吧_推广百度百科_买外链网站

2025/5/3 13:06:46 来源:https://blog.csdn.net/weixin_42531583/article/details/146432400  浏览:    关键词:宜昌做网站的公司_莱芜吧百度贴吧_推广百度百科_买外链网站
宜昌做网站的公司_莱芜吧百度贴吧_推广百度百科_买外链网站

一串字符串 用最少的分割次数把他们都变成回文串,

比如ABA 就不需要分割 返回0 

思路:递归处理从小规模开始处理 ,遇到大规模则可以先计算小的规模,然后把范围缩小,成小规模然后计算,每个规模都会有一个结果,最最优解不是单独一个规模的最优解,而是整体的最优解,先处理简单的 比如一个字符 那自然就返回0 还有两个一样的也返回0 还有只有中间和两边不一样的 也返回0 ,通过这些情况逐渐把问题分解

基本的判断

static  int  getMin(Integer[][]result,int first,int second,char[]arr){if(result[first][second]==null){if(first==second){result[first][second]=0;return 0;}else if(second-first==1){char secondChar = arr[second];char firstChar = arr[first];if(secondChar==firstChar){result[first][second]=0;return 0;}else{result[first][second]=1;return 1;}}else if(second-first==2){char secondChar = arr[second];char midChar=arr[first+1];char firstChar = arr[first];if(firstChar==secondChar){result[first][second]=0;return 0;}else if(midChar==firstChar||midChar==secondChar){result[first][second]=1;return 1;}else{result[first][second]=2;return 2;}}else{if(palindrome(arr,first,second)){result[first][second]=0;return 0;}int min=Integer.MAX_VALUE;for (int i = first; i < second; i++) {int curMin= getMin(result,first,i,arr)+getMin(result,i+1,second,arr)+1;min=Math.min(min,curMin);}result[first][second]=min;return min;}}else{return result[first][second];}}

比较难处理是 怎么把大规模转成小规模来计算,可以这样想,先从第一个哪里切一刀,这样剩下的继续求解,或者从第二个哪里切一刀,剩下的继续求解,还有一种情况一定要考虑到就是可以不切一刀,它自身就是回文串

判断是不是回文串方法

private static boolean palindrome(char[]arr,int first,int second){int mid=(second+first)/2;for (int i = first; i < mid; ) {if(arr[i]==arr[second]){second--;i++;continue;}else{return false;}}return true;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com