Сызыкты шифрден чечип, бүтүндөй картага түшүрүү Leetcode Solution


Кыйынчылык деңгээли жеңил
Көп суралган обай Сатуу бөлүмү
аркан

Маселени билдирүү

Бул маселеде бизге (0-9) жана '#' сандарынан турган сап берилет. Бул сапты төмөнкү картага түшүрүп, англис тилиндеги кичинекей тамгалар сабына өткөрүшүбүз керек.

Сызыкты шифрден чечип, бүтүндөй картага түшүрүү Leetcode Solution

мисал

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

Explanation:

“10 #” -> “j”, “11 #” -> “k”, “1” -> “a”, “2” -> “b”.

s = "1326#"
"acz"

Explanation:

“1” -> “a”, “3” -> “c”, “26 #” -> “z”.

жакындоо

Биз жөн гана '#' жөнүндө тынчсызданышыбыз керектигин көрө алабыз. Берилген сапты эсептегичтин жардамы менен солдон оңго карай өткөндө (i болсун), ар бир i индекси үчүн (0 <= i <= n-3), бизден кийинки индекстин жанындагы белги бар экендигин текшеришибиз керек. i + 2 индексиндеги символ '#'.

Ар бир i (0ден n-3ке чейин), эгер i + 2 индексиндеги символ '#' болсо, анда бул индексти i + 1 менен бириктирип, ушул эки цифраны колдонуп, символ түзүңүз.
мисалы, “12 #”, эгер сапты солдон оңго карай жылдырсак, анда i = 0 болгондо, i + 2 индексиндеги символ '#' болуп калат. Ошентип, i жана i + 1 индекстеринде орун алган цифраларды бириктирип, башкача айтканда 1 жана 2 сандарын бириктирип, аларды "12" кылыңыз. Эми 12ди "l" белгилеринин картасына которуп, аны кошуңуз stringbuilder sb.
“12” сабын “l” символуна өткөрүү үчүн, конверттөө функциясын түздүк, ал сап форматында санды алат жана аны тиешелүү символго өткөрөт.
Эгерде i + 2 индексиндеги символ '#' болбосо, анда i индексиндеги белгини i + 1 индексиндеги белгилер менен айкалыштырбашыбыз керек.

мисалы “123”, эгерде биз i = 0 индексинен көрсөк, i + 2 индекси, башкача айтканда, 2деги символ '#' эмес, ошондуктан биз жообубузга "1" белгилеринин конверсиясын кошобуз.

N-2 жана n-1 индексиндеги белгилер үчүн, эгер n-1деги char '#' болуп калса, анда биз 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

Алфавиттен сапты шифрден чыгаруу үчүн Java программасы бүтүндөй картага Leetcode чечимине

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 жана cpp агымындагы стринг агымында биз сап куруучуну колдондук. Эң начар учурда узундук саптын узундугу менен бирдей болот. Ошентип, космостун татаалдыгы да O (n).