[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"]
  ]

求字符串的的所有划分字符串列表,使得划分后的每一个字符串是回文字符串。


解题思路


采用递归的思路:
  1.  划分字符串,将数组划分为[0,i]和[i,n-1]的子字符串(其中0<i<n);
  2. 判断[0,i]是否是回文数,如果是的话求partition([i,n-1]),并将[0,i]添加到返回的列表中;
  3. 循环1、2,直到i==n - 1;

代码


/**
	 * 划分字符串,将数组划分为[0,i]和[i,n-1]的子字符串(其中0<i<n)
	 * 判断[0,i]是否是回文数,如果是的话求partition([i,n-1]),并将[0,i]添加到返回的列表中
	 * @param s
	 * @return
	 */
	public static List<List<String>> partition(String s) {
		int n = s.length();
		List<List<String>> result = new ArrayList<List<String>>();

		//len为每次字符串划分的位置
		for (int len = 1; len <= n; len++) {
			//划分字符串
			String subStr1 = s.substring(0, len);
			String subStr2 = s.substring(len, n);

			if (isPalindrome(subStr1)) {
				if (subStr2.equals("")) {
					List<String> list = new ArrayList<String>();
					list.add(subStr1);
					result.add(list);
				} else {
					List<List<String>> subList = partition(subStr2);

					if (subList.size() > 0) {

						for (List<String> l : subList) {

							l.add(0,subStr1);
						}
						result.addAll(subList);
					}
				}
			}
		}
		return result;
	}

	/**
	 * 判断一个字符串是否是回文字符串
	 * @param s
	 * @return
	 */
	public static boolean isPalindrome(String s) {
		int start = 0;
		int end = s.length() - 1;

		while (start < end) {
			if (s.charAt(start) == s.charAt(end)) {
				start++;
				end--;
			} else {
				return false;
			}
		}
		return true;
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值