LC609.在系统中查找重复文件(map)

问题

问题

解题

  • 暴力遍历每一个文件,然后先保存根目录,然后找到该文件的文件名,组合成绝对路径保存在以文件内容为key的map中。
class Solution {
    public List<List<String>> findDuplicate(String[] paths) {
        Map<String, List<String>> map = new HashMap();
        for(String path : paths){
            char[] ch = path.toCharArray();
            StringBuffer root = new StringBuffer();//根目录
            int i = 0;//遍历的指针
            while(ch[i] != ' '){
                root.append(ch[i] + "");
                i ++;
            }
            i += 1;//跳过空格
            root.append("/");//根目录
            while(i != ch.length){
                StringBuffer subPath = new StringBuffer(root);//每个文件的绝对路径
                if(ch[i] == ' ') i ++;//跳过空格
                while(ch[i] != '('){
                    subPath.append(ch[i] + "");
                    i ++;
                }
                i += 1;//跳过'('
                StringBuffer content = new StringBuffer();//内容
                while(ch[i] != ')'){
                    content.append(ch[i] + "");
                    i ++;
                }
                i += 1;//跳过')'
                String key = content.toString();
                if(!map.containsKey(key)){//添加到map中
                    map.put(key, new ArrayList<String>());
                    map.get(key).add(subPath.toString());
                }else{
                    map.get(key).add(subPath.toString());
                }
            }
        }
        List<List<String>> res = new ArrayList();
        for(String str : map.keySet()){
            if(map.get(str).size() > 1){//保证每一组是有重复,即个数大于1
                res.add(map.get(str));
            }
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值