1. 程式人生 > >分割回文串II

分割回文串II

給定一個字串s,將s分割成一些子串,使每個子串都是迴文。
返回s符合要求的的最少分割次數。
樣例
比如,給出字串s = "aab",

返回 1, 因為進行一次分割可以將字串s分割成["aa","b"]這樣兩個迴文子串

import java.util.Scanner;

/**
 * 給定一個字串s,將s分割成一些子串,使每個子串都是迴文。
返回s符合要求的的最少分割次數。
樣例
比如,給出字串s = "aab",
返回 1, 因為進行一次分割可以將字串s分割成["aa","b"]這樣兩個迴文子串
 * 
 * @author Dell
 *
 */
public class Test108 {
  public static int minCut(String s)
  {
      if(s.equals("")||s==null)
    	  return 0;
	  int len=s.length();
	 boolean[][] ishuiwen=new boolean[len][len];
	 for(int L=1;L<=len;L++)
	 {
		 for(int i=0;i<len-L+1;i++)
		 {
			  int j=i+L-1;
			 if(L==1)
			 {
				 ishuiwen[i][j]=true; 
			 }
			 else if(L==2)
			 {
				 if(s.charAt(i)==s.charAt(j))
					 ishuiwen[i][j]=true; 
			 }
			 else
			 {
				 if(s.charAt(i)==s.charAt(j)&&ishuiwen[i+1][j-1])
					 ishuiwen[i][j]=true; 
			 }
			 
		 }
	 }
	 int[] dp=new int[len];
	 for(int i=len-1;i>=0;i--)
	 {
		  if(ishuiwen[i][len-1])
		  {
			  dp[i]=0;
			  continue;
		  }
		    dp[i]=Integer.MAX_VALUE;
		  for(int j=i+1;j<len;j++)
		  {
			  if(ishuiwen[i][j-1]&&dp[i]>dp[j]+1)
			  {
				  dp[i]=dp[j]+1; 
			  }
		  }
	 }
	 return dp[0];
  }
	public static void main(String[] args) {
	  Scanner sc=new Scanner(System.in);
	  String s=sc.nextLine();
	  System.out.println(minCut(s));
	  
	}

}


相關推薦

分割 II · Palindrome Partitioning II

class nbsp 英文 長度 總結 正常 bsp 風格 思路 [抄題]: 給定一個字符串s,將s分割成一些子串,使每個子串都是回文。 返回s符合要求的的最少分割次數。 [思維問題]: [一句話思路]: [輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常

132 Palindrome Partitioning II 分割 II

回文 回文串 tco ++ ali 例如 post 字符 code 給定一個字符串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 符合要求的的最少分割次數。例如,給出 s = "aab",返回 1 因為進行一次分割可以將字符串 s 分割成 ["aa","b"]

LeetCode 132. 分割 II(Palindrome Partitioning II

題目描述   給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 &nb

【LeetCode】132. 分割 II 結題報告 (C++)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 解題方案: 動態規劃的題目

【LeetCode】#132分割II(Palindrome Partitioning II)

【LeetCode】#132分割回文串II(Palindrome Partitioning II) 題目描述 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例 輸入: “aab” 輸出: 1 解釋: 進行一次分割就可將 s

LeetCode-132.分割 II(相關話題:動態規劃)

給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 思路: 從後往前處理: boolean[][] f,

Leetcode 132:分割 II(最詳細的解法!!!)

給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 解題思路 這個問題是之前問題的提高?Leetco

lintode(108)分割 II

描述: 給定一個字串s,將s分割成一些子串,使每個子串都是迴文。 返回s符合要求的的最少分割次數。 樣例: 比如,給出字串s = "aab", 返回 1, 因為進行一次分割可以將字串s分割成["aa","b"]這樣兩個迴文子串 思路: eg:aabbaac 首先

[C++] LeetCode 132. 分割 II

題目 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 符合要求的的最少分割次數。 例如,給出 s = "aab", 返回 1 因為進行一次分割可以將字串 s 分割成 ["aa","b"] 這樣兩個迴文子串。 題解 這題有兩種解法,但是

分割II

給定一個字串s,將s分割成一些子串,使每個子串都是迴文。 返回s符合要求的的最少分割次數。 樣例 比如,給出字串s = "aab", 返回 1, 因為進行一次分割可以將字串s分割成["aa","b"]

LeetCode 132.Palindrome Partitioning II (分割 II)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個迴文子串。 AC C++ Solution:

lintcode練習-108. 分割 II

108. 分割回文串 II 給定一個字串s,將s分割成一些子串,使每個子串都是迴文。 返回s符合要求的的最少分割次數。 樣例 比如,給出字串s = "aab", 返回 1, 因為進行一次分割可

分割 · Palindrome Partitioning

nbsp space 特殊情況 clas 結束 ali rom 位置 函數 [抄題]: 給定一個字符串s,將s分割成一些子串,使每個子串都是回文串。 返回s所有可能的回文串分割方案。 給出 s = "aab",返回 [ ["aa", "b"], ["a", "a",

131 Palindrome Partitioning 分割

一個 oid ble etc post ++ cto 字符 可能 給定一個字符串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 所有可能的分割方案。例如,給出 s = "aab",返回[ ["aa","b"], ["a","a","b"]]詳見:https

LeetCode 131. 分割(Palindrome Partitioning)

題目描述   給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [ ["aa","b"], ["a","a","b"] ]  

LeetCode132.分割2

leetcode132.分割回文串2(動態規劃) 狀態:dp[i]表示字串s[0...i]最少的分割次數。 狀態轉移:dp[i] = min(dp[i], dp[j-1] + 1, 0=<j<=i&&s[j...i]是迴文串)。 邊界:dp[0] = 0。

LeetCode131.分割

 leetcode 131.分割回文串(dfs + 回溯) class Solution { public: //131.分割回文串 bool isPali(string s) { for (int i = 0; i < s.length() / 2; i++)

[Swift]LeetCode131. 分割 | Palindrome Partitioning

Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of&nb

【LeetCode】1131. 分割 結題報告 (C++)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [   ["aa","b"],   ["a","a","b"] ] 解題方案: 本題是回溯法的題目,回溯法總是

【LeetCode】#131分割(Palindrome Partitioning)

【LeetCode】#131分割回文串(Palindrome Partitioning) 題目描述 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例 輸入: “aab” 輸出: [ [“aa”,“b”], [“a”,“a”