栈
1.思路:在栈中只要把 / 的下标进栈和出栈就可以计算字符串中的字母,获取字符串中的字母用substring()函数根据 两个 / 的下标来确定区间。之后把符合的字母加入集合中。之后要判断值为“. ."时要删除集合中最后一个元素。之后用for循环拼接简化路径。
- class Solution {
- public String simplifyPath(String path) {
- //将输入值最后加入一个/,防止输入值最后没有/进行数据截取。
- path+="/";
- String s1="";
- //接收简要路径的集合
- ArrayList
li=new ArrayList<>(); - //栈来进行/的进栈操作来判断字符串中的规范字母值
- Stack
st=new Stack <>(); - //先进栈开头的/
- st.push(0);
- for(int i=1;i
- //判断字符为‘/‘时要把开头的下标出栈,在将当前的/的下标进行进栈操作
- if(path.charAt(i)=='/'){
- int j=st.pop();
- st.push(i);
- //判断两个/中是否有字母
- if(i-j>1){
- //用substring来进行截取字符串
- String d=path.substring(j+1,i);
- //用于判断三个.和三个以上的.的路径
- String o=path.substring(j+1,j+3);
- //如果截取的字符串为“..”。要把集合中最后一位的元素删除,如果集合没有元素就跳过
- if(d.equals("..")){
- if(li.isEmpty()){
- continue;
- }
- li.removeLast();
- continue;
- //如果截取的元素为一个.或者为三个.以上时跳过就好了
- }else if(d.equals(".")||(o.equals(".")&&i-j>3)){
- continue;
- //截取的部分为字母时就添加到集合中
- }else{
- li.add(d);
- }
- }
- }
- }
- //遍历集合拼接简化的路径
- for(int i=0;i
- s1+="/"+li.get(i);
- }
- //特殊情况,当集合中没有元素要进行特殊的处理。
- if(li.size()==0){
- s1="/";
- }
- return s1;
- }
- }
-
相关阅读:
MySql 数据库【连接查询】
Springboot----实现邮箱验证码登录(代码部分)
paddle 静态图自定义Python算子
【593. 有效的正方形】
could not read ok from ADB Server
御神楽的学习记录之SoC FPGA的第一个工程-Hello World
Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理
Mask RCNN 网络详解
ASEMI解读KBL610整流桥的使用说明及操作指南
基于C++实现旅行线路设计
-
原文地址:https://blog.csdn.net/AnDanXingKo/article/details/136465802