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"]
]
Use DFS to check every possible partition.
C++ Code:
/*
* func: valid_palindrome
* goal: to validate the input string
* @param s: input string
* @param left: left searching index
* @param right: right searching index
* return:
*/
bool valid_palindrome(string s, int left, int right){
while(left <= right){
if(s[left] != s[right]){
return false;
}else{
++left;
--right;
}
}
return true;
}
/*
* func: generate_combination
* goal: use DFS to generate combinations
* @param s: input string
* @param start: start searching index
* @param combination: current combination
* @param result: final result set
* return:
*/
void generate_combination(string s, int start, vector<string> &combination, vector<vector<string> > &result){
if(start >= s.length()){
result.emplace_back(combination);
return;
}
for(int i = start; i < s.length(); ++i){
if(valid_palindrome(s, start, i)){
string tmp = s.substr(start, i-start+1);
combination.emplace_back(tmp);
generate_combination(s, i+1, combination, result);
combination.pop_back();
}
}
}
/*
* func: palindrome_partition
* goal: return all possible palindrome partitioning of input string
* @param s: input string
* return: all possible combinations
*/
vector<vector<string> > palindrome_partition(string s){
vector<vector<string> > result;
vector<string> combination;
generate_combination(s, 0, combination, result);
return result;
}
Python Code:
# func: valid if current string is a palindrome
# @param start: start searching index
# @param end: end searching index
# @return: True or False
def valid_palindrome(s, start, end):
while start <= end:
if s[start] != s[end]:
return False
else:
start += 1
end -= 1
return True
# func: find all possible palindrome partitioning of input string
# @param s: input string
# @return: all possible partitions
def palindrome_partition(s):
result = []
combination = []
def palindrome_partition_helper(start):
if start >= len(s):
result.append(combination[:])
return
for i in xrange(start, len(s)):
if valid_palindrome(s, start, i):
combination.append(s[start:i+1])
palindrome_partition_helper(i+1)
combination.pop(-1)
palindrome_partition_helper(0)
return result
No comments:
Post a Comment