LeetCode 71 Simplify Path

本文深入探讨了Unix风格路径简化的问题,通过实例展示了如何处理相对路径、根目录、冗余斜杠及特殊符号,最终实现路径的高效简化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

Corner Cases:

  • Did you consider the case where path = "/../"?
    In this case, you should return "/".
  • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
    In this case, you should ignore redundant slashes and return "/home/foo".
思路:简单题,Unix文件的根目录为"/","."表示当前目录,".."表示上级目录
public class Solution {
    public String simplifyPath(String path) {
    	String []strs=path.split("/");
    	StringBuilder sb=new StringBuilder("");
    	LinkedList<String> ll=new LinkedList<String>();
    	for(String str:strs){
    		if(str.equals(".")) continue;
    		else if(str.equals("..")&&!ll.isEmpty()) {
    				ll.pollLast();
    		}else if(str.length()>0&&!str.equals("..")){
    			ll.add(str);
    		}
    	}
    	if(ll.isEmpty())return "/";
    	for(String str:ll){
    		sb.append("/");
    		sb.append(str);
    	}
    	return sb.toString();
    }
}


### LeetCode Problem 71 Simplify Path Problem 71 on LeetCode is titled "Simplify Path," which involves simplifying a given Unix-style path to its canonical form. The task does not directly involve stacks as the primary data structure, but one can implement solutions that utilize stack-like behavior or other methods. The goal of this problem is to convert an absolute path into its simplest and most normalized form by resolving `..` (parent directory), `.` (current directory), and multiple slashes (`//`). For instance: - Input: `/home/` - Output: `/home` A common approach uses string manipulation techniques rather than explicitly implementing a stack from scratch like in some problems such as those mentioned in another context[^2]. However, understanding how paths are processed could be analogous to operations performed when managing elements within a stack where directories might be pushed onto or popped off depending on whether they represent moving up or down through filesystem levels. For solving this particular challenge without focusing specifically on traditional stack implementation details found elsewhere [^3]: ```cpp #include <iostream> #include <sstream> #include <vector> using namespace std; string simplifyPath(string path) { stringstream ss(path); vector<string> tokens; string token, res = "", prev; while(getline(ss,token,'/')){ if(token==".." && !tokens.empty()) tokens.pop_back(); else if((!token.empty())&&(token!=".")&&(token!="..")) tokens.push_back("/"+token); } for(auto& s : tokens){ res += s; } return res.empty()? "/":res; } ``` This code snippet demonstrates handling various cases including consecutive slashes, current-directory symbols `.`, parent-directory symbols `..`. It iterates over parts split by slash characters, applying rules similar to pushing valid segments onto a list (acting similarly to a stack's functionality) and popping them upon encountering double dots indicating upward traversal beyond root level isn't possible thus ignored implicitly during construction phase only adding non-empty strings representing actual traversals back together forming final simplified result.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值