ক্রলার লগ ফোল্ডার লেটকোড সমাধান


কাঠিন্য মাত্রা সহজ
প্রায়শই জিজ্ঞাসা করা হয় মারকারি
গাদা

সমস্যা বিবৃতি

এই সমস্যায়, আমরা একটি ফোল্ডার সিস্টেমে আমাদের অবস্থানের উপর নজর রাখছি। আমরা প্রাথমিকভাবে এই সিস্টেমের মূল ফোল্ডার বা মূল ফোল্ডারে আছি।
আমাদের এখানে মূলত 3 ধরণের কমান্ড রয়েছে। কমান্ডগুলি স্ট্রিং আকারে যেখানে প্রতিটি স্ট্রিংয়ের অর্থ একটি কমান্ড।

  •  "../" এর অর্থ বর্তমান ফোল্ডারের প্যারেন্ট ফোল্ডারে যান (যদি ইতিমধ্যে রুট ফোল্ডারে থাকে তবে কোথাও যাবেন না)।
  •  "./" বর্তমান ফোল্ডারে থাকুন।
  •  "X /" বর্তমান ফোল্ডারের চাইল্ড ফোল্ডারে যান যার নাম x আছে।

আমাদেরকে কমান্ডের সিকোয়েন্স দেওয়া হয়েছে যা উপরের 3 কমান্ডের সংমিশ্রণ রয়েছে প্রদত্ত কমান্ডগুলি পূর্ববর্তী করার পরে রুট ফোল্ডারে ফিরে যেতে আমাদের ন্যূনতম সংখ্যার ক্রিয়াকলাপ খুঁজে বের করতে হবে।
যেমন
লগস = ["ডি 1 /", "ডি 2 / খেলা, খেলা../", "ডি 21 / খেলা, বলুন ./"]

ক্রলার লগ ফোল্ডার লেটকোড সমাধান
আমরা রুট ফোল্ডার থেকে গভীরতা 2 এ। সুতরাং, আমাদের উত্তর 2 হবে।

উদাহরণ

logs = ["d1/","d2/","../","d21/","./"]
2

ব্যাখ্যা:

এই পরিবর্তন ফোল্ডার অপারেশনটি “../” 2 বার ব্যবহার করুন এবং মূল ফোল্ডারে ফিরে যান।

logs = ["d1/","d2/","./","d3/","../","d31/"]
3

পন্থা 1 (স্ট্যাক ব্যবহার করে)

আমরা ফাইলের নামগুলির একটি স্ট্যাক ব্যবহার করতে পারি। প্রাথমিকভাবে আমাদের স্ট্যাক খালি। যখনই আমাদের সাবফোল্ডারে যেতে হবে তখন সাবফোল্ডারের নামটি স্ট্যাকের মধ্যে ঠেলা যায়। সুতরাং, আমরা বর্তমানে যে ফোল্ডারে রয়েছি তা সর্বদা স্ট্যাকের শীর্ষে থাকবে।
সুতরাং, যখনই আমরা "../" এর মুখোমুখি হই, তার অর্থ আমাদের বর্তমান ফোল্ডার থেকে বেরিয়ে আসতে হবে (অর্থাত্ প্যারেন্ট ফোল্ডারে চলে যেতে হবে), তারপরে আমরা বর্তমান ফোল্ডারটি মূল কিনা তা পরীক্ষা করব। যদি না হয়, তবে আমরা স্ট্যাক থেকে শীর্ষ উপাদানটি পপ করব।
এবং অবশ্যই যখনই আমরা "./" এর মুখোমুখি হব তখন আমাদের কিছুই করতে হবে না।
মই যদি অন্যটি হয় তা ব্যবহার করে আমরা এই তিনটি কেস পরিচালনা করছি।

আমাদের এখানে একটি জিনিস জানা উচিত যে স্ট্যাকটিতে উপস্থিত উপাদানগুলির সংখ্যাটি বলছে যে আমরা বর্তমানে রুট ফোল্ডার থেকে কত গভীরতায় রয়েছি।
সুতরাং, আমরা শেষ স্ট্যাকের আকার অর্থাৎ রুট ফোল্ডার থেকে গভীরতা ফিরে আসব।

ক্রলার লগ ফোল্ডার লেটকোড সমাধানের জন্য বাস্তবায়ন

সি ++ প্রোগ্রাম

#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int minOperations(vector<string>& logs) {
        stack<string>stack;
        for(string log:logs){
            if(log=="../"){
                if(stack.size()>0)stack.pop();
            }
            else if(log=="./");
            else{
                stack.push(log);
            }
        }
        return stack.size();
    }
int main()
{
    vector<string>logs{"d1/","d2/","../","d21/","./"};
    cout<<minOperations(logs);
}
2

জাভা প্রোগ্রাম

import java.util.*;
import java.lang.*;

class Solution
{  
    public static int minOperations(String[] logs) {
        Stack<String>stack=new Stack<String>();
        for(String log:logs){
            if(log.equals("../")){
                if(stack.size()>0)stack.pop();
            }
            else if(log.equals("./"));
            else{
                stack.push(log);
            }
        }
        return stack.size();
    }
    
    public static void main(String args[])
    {
        String[]logs={"d1/","d2/","../","d21/","./"};
        
        System.out.println(minOperations(logs));
    }
}
2

ক্রলার লগ ফোল্ডার লেটকোড সমাধানের জন্য জটিলতা বিশ্লেষণ

সময় জটিলতা

চালু): আমরা প্রদত্ত স্ট্রিংগুলিকে রৈখিকভাবে অতিক্রম করছি এবং প্রতিটি পুনরাবৃত্তির জন্য ও (1) সময়ে স্ট্যাক অপারেশন করছি। সুতরাং, সময়ের জটিলতা হ'ল (এন), যেখানে এন ইনপুট অ্যারের দৈর্ঘ্য।

স্পেস জটিলতা ity 

চালু): আমরা একটি স্ট্যাক ব্যবহার করেছি যার আকার দেওয়া ইনপুট অ্যারে দৈর্ঘ্যের সমান হতে পারে। সুতরাং, সবচেয়ে খারাপ ক্ষেত্রে স্থান জটিলতা হ'ল (এন)।

পদ্ধতির 2 (গভীরতার ভেরিয়েবল ব্যবহার করে)

মূলত গভীরতার ভেরিয়েবলটি ট্র্যাক করেই সমস্যার সমাধান করা যায় যা মূলত দেখায় যে আমরা মূল ফোল্ডার থেকে কোন গভীরতায় আছি depth
প্রতিবার আমরা যখন কোনও শিশু ফোল্ডারে যাব, আমরা মূল ফোল্ডারটি থেকে দূরত্ব 1 দিয়ে এগিয়ে যাচ্ছি (অর্থাত গভীরতা ++)
প্রতিবার যখন আমরা প্যারেন্ট ফোল্ডারে যাব, আমরা দূরত্বের 1 (অর্থাত গভীরতা) দ্বারা রুট ফোল্ডারে আরও কাছে আসছি are
মনে রাখবেন যে আমরা মূল ফোল্ডারে না থাকলে আমরা কেবল প্যারেন্ট ফোল্ডারে যেতে পারি।
সুতরাং, আমরা কমান্ডগুলি বাম থেকে ডানে ডানদিকে ব্যবহার করতে শুরু করব লুপ .

  • আমরা যদি “../” এর মুখোমুখি হই তবে আমরা পরীক্ষা করব যে আমরা মূল ফোল্ডারে আছি কি না। যদি না হয় তবে আমরা গভীরতা 1 দ্বারা হ্রাস করব।
  • অন্যথায় যদি আমরা "./" এর মুখোমুখি হই তবে আমাদের বর্তমান ফোল্ডারে থাকতে হবে, এভাবে গভীরতার ভেরিয়েবলের কোনও পরিবর্তন হবে না।
  • অন্যথায় আমাদের সন্তানের একটি ফোল্ডারে যেতে হবে। সুতরাং, আমরা আমাদের গভীরতা 1 দ্বারা বৃদ্ধি করব।

সমস্ত কমান্ডের পরে, আমাদের গভীরতা ভেরিয়েবল মূল ফোল্ডার থেকে দূরত্ব সঞ্চয় করছে। আমরা এটিকে আউটপুট হিসাবে ফিরিয়ে দেব।

ক্রলার লগ ফোল্ডার লেটকোড সমাধানের জন্য বাস্তবায়ন

সি ++ প্রোগ্রাম

#include <iostream>
#include <vector>
using namespace std;

int minOperations(vector<string>& logs)
{
    int depth=0;
    for(string log:logs)
    {
        if(log=="../")
        {
            if(depth>0)depth--;//moving to parent folder only if depth>0 i.e. current folder is    
                                 other than main folder 
        }
        else if(log=="./");    //staying to current folder
        else depth++;          //moving to child folder
    }
    return depth;
}
int main()
{
    vector<string>logs{"d1/","d2/","../","d21/","./"};
    cout<<minOperations(logs);
}
2

ক্রলার লগ ফোল্ডার লেটকোড সমাধানের জন্য জাভা প্রোগ্রাম

import java.util.*;
import java.lang.*;

class Solution
{  
    public static int minOperations(String[] logs)
    {
        int depth=0;
        for(String log:logs)
        {
            if(log.equals("../"))
            {
                if(depth>0)depth--;//moving to parent folder only if depth>0 i.e. current folder is other than main folder 
            }
            else if(log.equals("./"));  //staying to current folder
            else depth++;               //moving to child folder
        }
        return depth;
    }
    
    public static void main(String args[])
    {
        String[]logs={"d1/","d2/","../","d21/","./"};
        
        System.out.println(minOperations(logs));
    }
}
2

ক্রলার লগ ফোল্ডার লেটকোড সমাধানের জন্য জটিলতা বিশ্লেষণ

সময় জটিলতা

চালু): আমরা একবারে সমস্ত কমান্ড সম্পাদন করছি। সুতরাং, সময়ের জটিলতা হ'ল ও (এন)।

স্পেস জটিলতা ity 

ও (1): আমরা সবেমাত্র একটি গভীরতার পরিবর্তনশীল ব্যবহার করেছি। সুতরাং, স্পেস জটিলতা হ'ল ও (1)।