add: 230412
This commit is contained in:
parent
61cd797e28
commit
5c584f805c
|
|
@ -0,0 +1,44 @@
|
|||
#include <string>
|
||||
|
||||
/**
|
||||
* 71. Simplify Path
|
||||
* Given a string path, which is an absolute path (starting with a slash '/') to a file or directory in a Unix-style file system, convert it to the simplified canonical path.
|
||||
*
|
||||
* In a Unix-style file system, a period '.' refers to the current directory, a double period '..' refers to the directory up a level, and any multiple consecutive slashes (i.e. '//') are treated as a single slash '/'. For this problem, any other format of periods such as '...' are treated as file/directory names.
|
||||
*
|
||||
* The canonical path should have the following format:
|
||||
*
|
||||
* The path starts with a single slash '/'.
|
||||
* Any two directories are separated by a single slash '/'.
|
||||
* The path does not end with a trailing '/'.
|
||||
* The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period '.' or double period '..')
|
||||
* Return the simplified canonical path.
|
||||
*/
|
||||
|
||||
class Solution {
|
||||
public:
|
||||
static std::string simplifyPath(const std::string&);
|
||||
};
|
||||
|
||||
std::string Solution::simplifyPath(const std::string& path) {
|
||||
char buf[3072]{};
|
||||
int n = path.size(), ps = 0, pt = 1, prev = 0;
|
||||
const char* ptr = path.c_str();
|
||||
for (; pt <= n; ++pt) {
|
||||
if (ptr[pt] && ptr[pt] != '/')
|
||||
continue;
|
||||
if (int diff = pt - prev; diff == 3 && ptr[pt - 1] == '.' && ptr[pt - 2] == '.') {
|
||||
while (ps > 0 && buf[--ps] != '/');
|
||||
} else if (diff > 2 || (diff == 2 && ptr[prev + 1] != '.')) {
|
||||
buf[ps++] = '/';
|
||||
for (int i = prev + 1; i < pt; buf[ps++] = ptr[i++]);
|
||||
}
|
||||
prev = pt;
|
||||
}
|
||||
return ps ? std::string(buf, buf + ps) : "/";
|
||||
}
|
||||
|
||||
int main() {
|
||||
auto r = Solution::simplifyPath("/a//b////c/d//././/..");
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4,4 +4,4 @@ PROJECT(2304)
|
|||
SET(CMAKE_CXX_STANDARD 23)
|
||||
SET(CMAKE_EXPORT_COMPILE_COMMANDS true)
|
||||
|
||||
ADD_EXECUTABLE(2304 230411-CN.cpp)
|
||||
ADD_EXECUTABLE(2304 230412.cpp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue