一、給定字符串s,分區s使得分區的每一個子字符串都是迴文。spa
返回s的全部可能的迴文分區。
例如,給定s =「aab」,
返回code
[ ["aa","b"], ["a","a","b"] ]
class Solution { public: void dfs(string s,vector<string>&path,vector<vector<string>>&res){ if(s.size() < 1){ res.push_back(path); return; } for(int i = 0;i<s.size();i++){ int begin = 0; int end = i; while(begin < end){ if(s[begin] == s[end]){ begin++; end--; } else break; } if(begin >= end){ path.push_back(s.substr(0,i+1)); dfs(s.substr(i+1), path,res); path.pop_back(); } } } vector<vector<string>> partition(string s) { vector<vector<string>>res; vector<string>path; dfs(s,path,res); return res; } };
二、給定文件的絕對路徑(Unix風格),簡化它。
例如,
path =「/ home /」,=>「/ home」
path =「/ a /./ b /../../ c /」,=>「/ c」
單擊以顯示角落案例。
角落案例:blog
您是否考慮過path =「/../」的狀況?
在這種狀況下,您應該返回「/」。
另外一個極端狀況是路徑可能包含多個斜槓'/',例如「/ home // foo /」。
在這種狀況下,您應該忽略冗餘斜槓並返回「/ home / foo」。字符串
class Solution { public: string simplifyPath(string path) { string res,tmp; vector<string> stk; stringstream ss(path); while(getline(ss,tmp,'/')) { if (tmp == "" or tmp == ".") continue; if (tmp == ".." and !stk.empty()) stk.pop_back(); else if (tmp != "..") stk.push_back(tmp); } for(auto str : stk) res += "/"+str; return res.empty() ? "/" : res; } };