LeetCode---Palindrome Partitioning

題目大意:給出一個字符串,對該字符串進行各種切割,使得切割後的每個子串是迴文,找出所有的情況。

算法思想:

整體上採用深度優先搜索的思想。遍歷字符串的每一個元素,判斷從該元素處斷開是否是一個合法方案(即構成迴文)若是則遞歸搜索剩下一部分字符串的可行方案。

代碼如下:

class Solution {
public:
    vector<vector<string> > partition(string s) {
        vector<vector<string> >res;
        vector<string> path;
        dfs(s,res,path,0);
        return res;
    }
    
    void dfs(string s,vector<vector<string> >&res,vector<string> &path,size_t start ){
    	
    	if(start==s.size()){
    		res.push_back(path);
    		return ;
		}
		
		for(int i=start;i<s.size();++i){
			if(isPalindrome(s,start,i)){
				path.push_back(s.substr(start,i-start+1));
				dfs(s,res,path,i+1);
			    path.pop_back();
			}
		}
    		
	}
	
	bool isPalindrome(string s,size_t start,size_t end){
		
		
		while(start<end&&s[start]==s[end]){
			++start;
			--end;
		}
	    return start<end?false:true;
	}
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章