天天一道Rust-LeetCode(2019-06-10)

天天一道Rust-LeetCode(2019-06-02) Z 字形變換

堅持天天一道題,刷題學習Rust.git

題目描述

https://leetcode-cn.com/problems/simplify-path/github

以 Unix 風格給出一個文件的絕對路徑,你須要簡化它。或者換句話說,將其轉換爲規範路徑。學習

在 Unix 風格的文件系統中,一個點(.)表示當前目錄自己;此外,兩個點 (..) 表示將目錄切換到上一級(指向父目錄);二者均可以是複雜相對路徑的組成部分。更多信息請參閱:Linux / Unix中的絕對路徑 vs 相對路徑code

請注意,返回的規範路徑必須始終以斜槓 / 開頭,而且兩個目錄名之間必須只有一個斜槓 /。最後一個目錄名(若是存在)不能以 / 結尾。此外,規範路徑必須是表示絕對路徑的最短字符串。leetcode

示例 1:字符串

輸入:"/home/"
輸出:"/home"
解釋:注意,最後一個目錄名後面沒有斜槓。
示例 2:get

輸入:"/../"
輸出:"/"
解釋:從根目錄向上一級是不可行的,由於根是你能夠到達的最高級。
示例 3:string

輸入:"/home//foo/"
輸出:"/home/foo"
解釋:在規範路徑中,多個連續斜槓須要用一個斜槓替換。
示例 4:it

輸入:"/a/./b/../../c/"
輸出:"/c"
示例 5:io

輸入:"/a/../../b/../c//.//"
輸出:"/c"
示例 6:

輸入:"/a//b////c/d//././/.."
輸出:"/a/b/c"

解題過程

思路:

  1. 根據/將string 分割
  2. 用棧來處理
  3. 若是是空忽略,若是是..則出棧
  4. 最後把棧裏的字符串拼接便可.
struct Solution {}
impl Solution {
    pub fn simplify_path(path: String) -> String {
        let mut st = Vec::new();
        let ss: Vec<_> = path.split("/").collect();
        for s in path.split("/") {
            //            println!("s={}", s);
            if s.len() == 0 {
                continue;
            } else if s == ".." {
                st.pop();
            } else if s == "." {
                continue;
            } else {
                st.push(s);
            }
        }
        let mut s = String::new();
        for t in st {
            s += "/";
            s += t;
        }
        if s.len() == 0 {
            s += "/"
        }
        s
    }
}

mod test {
    use super::*;
    #[test]
    fn test_path() {
        assert_eq!(
            "/home/foo",
            Solution::simplify_path(String::from("/home//foo/"))
        );
        assert_eq!("/home", Solution::simplify_path(String::from("/home")));
        assert_eq!("/", Solution::simplify_path(String::from("/../")));
        assert_eq!(
            "/c",
            Solution::simplify_path(String::from("/a/./b/../../c/"))
        );
        assert_eq!(
            "/a/b/c",
            Solution::simplify_path(String::from("/a//b////c/d//././/.."))
        );
    }
}

一點感悟

太簡單了,有湊數之嫌,下次應該找一些有價值的來作

其餘

歡迎關注個人github,本項目文章全部代碼均可以找到.

相關文章
相關標籤/搜索