博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Simplify Path [字符串操作]
阅读量:6198 次
发布时间:2019-06-21

本文共 1517 字,大约阅读时间需要 5 分钟。

Problem

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

Example

"/home/", => "/home" //去掉末尾的slash"/a/./b/../../c/", => "/c" //每个"/../"对应:删除一个上层的segment

Challenge

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".

Note

关于challenge的两点:

  1. "/../",这里讨论的有两种情况,空集和"/../"本身。空集加一个if语句返回slash就可以了,"/../"本身要综合Example的例子,pop出上一层元素。

  2. Multiple slashes,可以用split()函数去掉所有slash,然后多考虑一个slash中间为空的case。

关于switch语句的一个特点:

我们对case ""和case "."其实都是不做操作,然而,两个case可以都break,但是不能都不做操作。像这样:

case "":case ".":

这样这两个case就都会等价于下一个case:case "..". 就会出错。

Solution

public class Solution {    public String simplifyPath(String path) {        Stack
stack = new Stack
(); String[] segments = path.split("/"); for (String segment: segments) { switch(segment) { case "": break; case ".": case "..": if (!stack.isEmpty()) { stack.pop(); } break; default: stack.push(segment); } } StringBuilder sb = new StringBuilder(); if (stack.isEmpty()) {//空集的情况 return "/"; } while (!stack.isEmpty()) { sb.insert(0, "/"+stack.pop());//Don't miss the slash! } return sb.toString(); }}

转载地址:http://fsnca.baihongyu.com/

你可能感兴趣的文章
两种方式建立Vsftpd虚拟用户
查看>>
switch的用法
查看>>
iOS-WebViewJavascriptBridge
查看>>
Visual Studio 编译后去掉只读属性
查看>>
删除大目录
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
ansible报错解决
查看>>
PXE 自动安装 原理及过程
查看>>
我的友情链接
查看>>
OSPF复习
查看>>
IT Administrator
查看>>
IT职场人生系列之十:创业观
查看>>
ocjp 21-30
查看>>
Centos7 Scrapy 安装过程
查看>>
图说:Windows 8触控操作打开App Bar
查看>>
10.1综合强化刷题 Day2 afternoon
查看>>
洛谷——P1029 最大公约数和最小公倍数问题
查看>>
我的友情链接
查看>>
9.8 模拟试题
查看>>