当前位置: 首页 > news >正文

LeetCode -- Palindrome Partitioning

题目描述:


Given a string s, partition s such that every substring of the partition is a palindrome.


Return all possible palindrome partitioning of s.


For example, given s = "aab",
Return


  [
    ["aa","b"],
    ["a","a","b"]
  ]


把字符串s进行分割,要求分割后的每个子串(s[i...j],其中i,j∈[0,n))都是回文。


本题算是回溯问题,与Combination Sum的1和2属于同类问题。


使用经典的回溯模型:
BackTracking(start , current, result):
if start is end :
add current to result


i = start to end:
currentAdd(the [i]th element);
BackTracking(i+1, current, result)
currentRemove(the [i]th element)


至于判断回文的过程就不介绍了,判断两头字符是否相等,直到中间元素位置。




实现代码:




public class Solution {
    public IList<IList<string>> Partition(string s) 
    {
        if(string.IsNullOrEmpty(s))
        {
    		return new List<IList<string>>();
    	}
    	
    	var result = new List<IList<string>>();
    	Travel(s, 0, new List<string>() , ref result);
    	
    	return result;
    }
	


private void Travel(string s , int start, IList<string> current, ref List<IList<string>> result)
{
	if(start == s.Length)
	{
		result.Add(new List<string>(current));
		return;
	}
	
	for(var i = start + 1; i <= s.Length; i++)
	{
		var x = s.Substring(start, i - start);
		if(IsP(x)){
			current.Add(x);
			Travel(s, i , current, ref result);
			current.RemoveAt(current.Count - 1);
		}
	}
}




private bool IsP(string s)
{
	if(s.Length == 1){
		return true;
	}
	
	var len = s.Length % 2 == 0 ? s.Length / 2 : (s.Length - 1) / 2;
	
	for(var i = 0;i < len; i++){
		if(s[i] != s[s.Length - 1- i]){
			return false;
		}
	}
	
	return true;
}
}


相关文章:

  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • LeetCode -- Pow(x, n)
  • (ZT)出版业改革:该死的死,该生的生
  • LeetCode -- Rectangle Area
  • 推荐一个做“台”的思路
  • LeetCode -- Reverse Nodes in k-Group
  • LeetCode -- Binary Search Tree Iterator
  • 使用pgRouting进行路径分析
  • LeetCode -- Combination Sum III
  • 怎样使用深度纹理
  • LeetCode -- Expression Add Operators
  • [Web 开发] 获取页面元素的坐标及大小
  • LeetCode -- First Bad Version
  • 本地SPAN和远程SPAN监控原理
  • LeetCode -- House Robber II
  • @jsonView过滤属性
  • 《Java编程思想》读书笔记-对象导论
  • docker-consul
  • Golang-长连接-状态推送
  • hadoop集群管理系统搭建规划说明
  • js正则,这点儿就够用了
  • Linux下的乱码问题
  • Odoo domain写法及运用
  • python大佬养成计划----difflib模块
  • session共享问题解决方案
  • Yeoman_Bower_Grunt
  • 番外篇1:在Windows环境下安装JDK
  • 给初学者:JavaScript 中数组操作注意点
  • 技术发展面试
  • 面试总结JavaScript篇
  • 前端学习笔记之观察者模式
  • 译有关态射的一切
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #Spring-boot高级
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (NSDate) 时间 (time )比较
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (南京观海微电子)——I3C协议介绍
  • (三)c52学习之旅-点亮LED灯
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core和.Net Standard直观理解
  • .NET Project Open Day(2011.11.13)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @在php中起什么作用?
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [Bada开发]初步入口函数介绍