በገመድ ሌቲኮድ መፍትሄ ውስጥ ገመድ ማዛመድ


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ አማዞን
ሕብረቁምፊ

ችግሩ በ ‹ገመድ› Leetcode Solution ውስጥ የሕብረቁምፊ ማዛመጃ በርካታ ረድፎችን ይሰጠናል ፡፡ ችግሩ የአንዳንዶቹ የሌላ ገመድ የሆኑ ሕብረቁምፊዎችን እንድንፈልግ ይጠይቀናል ክር ከግብአት. ከሁለቱም ጫፎች ላይ ቁምፊዎችን ካስወገዱ በኋላ አንድ ፈጣን ማሳሰቢያ ብቻ ፣ የተንቀሳቃሽ ስልክ ቁልፍ ምንም አይደለም። እንዲሁም ከሁለቱም ጫፎች 0 ቁምፊዎችን ማስወገድ ይችላሉ። እና የተወገዱ የቁምፊዎች ብዛት ተመሳሳይ መሆን አያስፈልገውም። ስለዚህ ለተሻለ ግንዛቤ ጥቂት ምሳሌዎችን እንመልከት ፡፡

በገመድ ሌቲኮድ መፍትሄ ውስጥ ገመድ ማዛመድ

words = ["mass","as","hero","superhero"]
["as","hero"]

ማብራሪያ-ውጤቱ “በጅምላ” ስለሚመጣ “እንደ” አለው። በተመሳሳይ “ጀግና” የ “ልዕለ ኃያል” አካል ነው ፡፡ ስለሆነም እኛ ግብዓት የሆኑ የግብዓት ንጣፎችን በቀላሉ አገኘን ፡፡

words = ["leetcode","et","code"]
["et","code"]

ማብራሪያ-ይህ ምሳሌ እንደሚያሳየው ተጣጣፊዎቹ ከአንድ ተመሳሳይ ገመድ ሊሆኑ ይችላሉ ፡፡ እንደ እዚህ ፣ በውጤቱ ውስጥ ያሉት ሁለቱም ሕብረቁምፊዎች የ “ሌቲኮድ” ንጣፎች ናቸው።

በድርድር ሊትኮድ መፍትሄ ውስጥ ለገመድ ማዛመጃ አቀራረብ

ችግሩ አንድ የተወሰነ ሁኔታን ከሚያረካ ግብዓት ውስጥ ያሉትን ክሮች እንድናወጣ ጠየቀን ፡፡ ሁኔታው ህብረቁምፊው በግብዓት ውስጥ ያለ የክርክር ገመድ መሆን አለበት። ስለዚህ ፣ የሌላ የሌላ ሕብረቁምፊ ንጣፍ የሚለቁትን ክሮች ለማግኘት ይህንን ሂደት ለማስመሰል እንሞክራለን ፡፡ የሚቀረው ብቸኛው ውስብስብ አተገባበር ነው ፡፡ ስለዚህ እኛ እንደ ውጤታችን የሚያገለግሉ ሕብረቁምፊዎችን ለመከታተል ሃሽሽ ወይም ያልተስተካከለ ካርታ እንጠቀማለን ፡፡ በ ith ማውጫ ላይ ያለው ገመድ በ jth ማውጫ እና በተቃራኒው የተገጠመለት ሕብረቁምፊ ንጣፍ መሆኑን የሚያረጋግጡ ሁለት የጎጆ ቀለበቶችን እንጠቀማለን። በ C ++ ውስጥ ሁለተኛው ሕብረቁምፊ የመጀመርያው ክርክር ንዑስ ክፍል መሆኑን የሚያረጋግጥ የራሳችንን ተግባር ፈጥረናል ፡፡ በጃቫ ውስጥ ይህ () ተግባርን በመጠቀም በቀላሉ ሊገኝ ይችላል ፡፡

በድርድር ሌቲኮድ መፍትሄ ውስጥ ለገመድ ማዛመጃ ኮድ

ሲ ++ ኮድ

#include <bits/stdc++.h>
using namespace std;

bool isSubstr(string a, string b){
    int n = a.size(), m = b.size();
    for(int i=0;i<=n-m;i++){
        if(a.substr(i, m) == b)
            return true;
    }
    return false;
}

vector<string> stringMatching(vector<string>& words) {
    unordered_set<string> tmp;
    int n = words.size();
    for(int i=0;i<n-1;i++){
        string curWord = words[i];
        for(int j=i+1;j<n;j++){
            string nextWord = words[j];
            if(isSubstr(curWord, nextWord))
                tmp.insert(nextWord);
            if(isSubstr(nextWord, curWord))
                tmp.insert(curWord);
        }
    }
    return vector<string>(tmp.begin(), tmp.end());
}

int main(){
    vector<string> input({"mass","as","hero","superhero"});
    vector<string> v = stringMatching(input);
    for(auto x: v)
        cout<<x<<" ";
}
hero as

የጃቫ ኮድ

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

class Main
{
  public static List<String> stringMatching(String[] words) {
        HashSet<String> tmp = new HashSet<>();
        
        int n = words.length;
        for(int i = 0; i<n-1; i++) {
            String curWord = words[i];
            for(int j = i+1; j<n; j++) {
                String nextWord = words[j];
                if(curWord.contains(nextWord))
                    tmp.add(nextWord);
                if(nextWord.contains(curWord))
                    tmp.add(curWord);
            }
        }
        
        return new ArrayList<String>(tmp);
    }
    
  public static void main (String[] args) throws java.lang.Exception{
    String[] words = {"mass","as","hero","superhero"};
    List<String> list = stringMatching(words);
    for(String x: list)
      System.out.print(x+" ");
  }
}
hero as

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (N ^ 2 * | S |) ፣ ምክንያቱም በግብዓት ክሮች ብዛት ላይ ጥገኛ የሆኑ ሁለት የጎጆ ቀለበቶችን ስለተጠቀምን ፡፡ ከዚያ ሕብረቁምፊው የሌሎች ፍላጎቶች ማጠፊያ ከሆነ ለመፈለግ ያገለገለው ተግባር ኦ (| S |) ጊዜ.

የቦታ ውስብስብነት

ኦ (ኤን) ፣ በጣም አስከፊ በሆነ ሁኔታ የግብዓት ሁሉ ውጤት ሊሆን ይችላል ፡፡ ስለዚህ የቦታ ውስብስብነት መስመራዊ ነው።