每天一道LeetCode-----化简路径
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----化简路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Simplify Path
原題鏈接Simplify Path
要求是輸入一個路徑,由于路徑中存在”..”,”.”等特殊標記符,所以字符串表示的路徑可能不是真實路徑,返回真實的路徑
對于特殊字符的解釋如下
- “..”表示回到上一級,如/home/a/../實際指向的路徑是/home
- “.”可以略過,不對當前路徑做修改,如/home/a/./b實際指向的路徑是/home/a/b
- “//”多個斜線連在一起可以簡化為一條,如/home//a/實際指向的路徑是/home/a
本題主要利用字符串的分解進行解決,對于有效路徑的內容,可以選擇棧(stack),數組(vector)存儲。掃描一遍給定字符串后將有效的路徑信息存儲在容器中,在最后重新組合成一個實際路徑
因為路徑是由”/”分隔的,所以分解字符串可以利用getline()函數,其中的某個重載如下可以接收第三個參數作為分隔符,可以傳入’/’來簡化字符串的分解
代碼如下
class Solution {public:string simplifyPath(string path) {std::stack<string> st;std::stringstream oss(path);std::string filename("");while(getline(oss, filename, '/')){if(filename == "" || filename == ".")continue;else if(filename == ".." && !st.empty())st.pop();else if(filename != "..")st.push(filename);}std::string res("");while(!st.empty()){res = "/" + st.top() + res;st.pop();}/* 如果棧是空的,那么就返回"/",否則,所有的"/"都在while循環中添加過了 */return res.empty() ? "/" : res;}};本題主要利用getline函數簡化字符串的分解,第三個參數可以傳入分隔符,而默認換行符是分隔符
總結
以上是生活随笔為你收集整理的每天一道LeetCode-----化简路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----找到有
- 下一篇: 每天一道LeetCode-----使用最