სტრიქონის გაშიფვრა ანბანიდან Inteet Mapping Leetcode Solution


Რთული ტური Easy
ხშირად ეკითხებიან Quip Salesforce
სიმებიანი

პრობლემის განცხადება

ამ პრობლემის დროს, ჩვენ გვეძლევა სტრიქონი, რომელიც შეიცავს ციფრებს (0-9) და '#'. ჩვენ უნდა გადავაკეთოთ ეს სტრიქონი მცირე ასოების სტრიქონზე შემდეგი რუკების გამოყენებით.

სტრიქონის გაშიფვრა ანბანიდან Inteet Mapping Leetcode Solution

მაგალითი

s = "10#11#12"
"jkab"

განმარტება:

"10 #" -> "კ", "11 #" -> "კ", "1" -> "ა", "2" -> "ბ".

s = "1326#"
"acz"

განმარტება:

"1" -> "ა", "3" -> "გ", "26 #" -> "ზ".

მიდგომა

ჩვენ ვხედავთ, რომ უბრალოდ უნდა ვიფიქროთ "#" - ზე. როდესაც მოცემულ სტრიქონს გადავკვეთთ მარცხნიდან მარჯვნივ მრიცხველის გამოყენებით (მოდით i), მაშინ თითოეული ინდექსისთვის i (0 <= i <= n-3), ჩვენ უბრალოდ უნდა გადავამოწმოთ, არის თუ არა სიმბოლო შემდეგი ინდექსის გვერდიდან i i + 2 ინდექსში სიმბოლოა "#".

თითოეული i- სთვის (0-დან n-3-მდე), თუ i + 2 ინდექსის სიმბოლოა "#", აერთიანეთ ეს ინდექსი i- სთან i + 1 და ქმნით სიმბოლოს ამ ორი ციფრის გამოყენებით.
მაგ. "12 #", თუ სტრიქონს გადავკვეთთ მარცხნიდან მარჯვნივ, ვხედავთ, რომ როდესაც i = 0, მაშინ სიმბოლო i + 2 ინდექსში არის "#". ამრიგად, აერთიანეთ i და i + 1 ინდექსებში მოცემული ციფრები, ანუ აერთიანებთ ციფრებს 1 და 2, აქცევს მათ "12". ახლა გადაიყვანეთ 12 მისი სიმბოლოების რუკად, ანუ ”l” და დაამატეთ იგი სიმების მშენებელი სბ
სტრიქონის ”12” სიმბოლოს ”l” გადასაყვანად შევქმენით კონვერტირების ფუნქცია, რომელიც იღებს რიცხვს სიმების ფორმატში და გადააქცევს შესაბამის სიმბოლოს.
და თუ i + 2 ინდექსის სიმბოლო არ არის '#', მაშინ ჩვენ არ უნდა დავუკავშიროთ სიმბოლო i ინდექსით i და სიმბოლო i + 1.

მაგ. "123", თუ ჩვენ ვხედავთ ინდექსიდან i = 0, ინდექსი i + 2, ანუ სიმბოლო 2-ში არ არის "#", ამრიგად, ჩვენ პასუხში დავამატებთ "1" -ის სიმბოლოს გარდაქმნას.

N-2 და n-1 ინდექსის სიმბოლოსთვის შეგვიძლია ვთქვათ, რომ თუ n-1-ზე ნახატი უკვე იქნებოდა '#', მაშინ ჩვენ გამოვდივართ მარყუჟის შემდეგ n-3 ინდექსის შემდეგ, სხვა შემთხვევაში ორივე სიმბოლო n-2 და n-1 ცალკე უნდა იყოს ასახული.

განხორციელება

C ++ პროგრამა ანბანიდან სიმების გაშიფვრისთვის Leetcode Solution- ის მთელი რუკების ასახვისთვის

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

char convert(string str){
    stringstream ss(str);
    int num;
    ss>>num;
    return num+96;
}

string freqAlphabets(string s) {
        stringstream ss;
        int i=0;
        while(i<s.length()-2){
            char ch;
            if(s[i+2]=='#'){
                ch=(char)convert(s.substr(i, 2) );
                i+=2;
            }else{
                ch=(char)convert(s.substr(i,1));
            }
            i++;
            ss<<ch;
        }
        while(i<s.length()){
            char ch=(char)convert(s.substr(i,1));
            ss<<ch;
            i++;
        }
        
        return ss.str();
    }

int main()
{
    cout << freqAlphabets("1326#") ;
}
acz

ჯავა პროგრამა ანბანიდან სიმების გაშიფვრისთვის Leetcode Solution- ის მთელი რუკების ასახვისთვის

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

class Rextester
{  
    public static String freqAlphabets(String s) {
        StringBuilder sb=new StringBuilder();
        int i=0;
        while(i<s.length()-2){
            char ch;
            if(s.charAt(i+2)=='#'){
                ch=(char)convert(s.substring(i,i+2));
                i+=2;
            }else{
                ch=(char)convert(s.substring(i,i+1));
            }
            i++;
            sb.append(ch);
        }
        while(i<s.length()){
            char ch=(char)convert(s.substring(i,i+1));
            sb.append(ch);
            i++;
        }
        
        return sb.toString();
    }
    
    
    public static int convert(String str){
        int num=Integer.parseInt(str);
        return num+96;
    }

    public static void main(String args[])
    {
        System.out.println(freqAlphabets("10#11#12"));
    }
}
jkab

სირთულის ანალიზი სტრიქონის გაშიფვრისთვის ანბანიდან მთლიანი რუკის Leetcode ამოხსნამდე

დროის სირთულე

O (n): რადგან ჩვენ ჩვენს სტრიქონს წრფივად ვათვალიერებთ მარცხნიდან მარჯვნივ, ამრიგად O (n) დრო დაიხარჯება.

სივრცის სირთულე 

O (n): ჩვენ გამოვიყენეთ სიმების შემქმნელი java და string ნაკადის შემთხვევაში cpp. უარეს შემთხვევაში მაშინ სიგრძე იგივე იქნება, რაც სტრიქონის სიგრძე. ამრიგად, სივრცის სირთულეც არის O (n).