LeetCode--字符串

一、給定字符串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;
    }
};
相關文章
相關標籤/搜索