Վերծանել տողը այբուբենից ամբողջ թիվ քարտեզագրող Leetcode լուծման համար


Դժվարության մակարդակ Հեշտ
Հաճախակի հարցնում են Հանգստացնել Salesforce
String

Խնդիրի հայտարարություն

Այս խնդրում մեզ տրվում է մի տող, որը պարունակում է թվանշաններ (0-9) և '#: Մենք պետք է այս տողը փոխակերպենք փոքրատառ անգլերեն տառերի տողի ՝ օգտագործելով հետևյալ քարտեզագրումը:

Վերծանել տողը այբուբենից ամբողջ թիվ քարտեզագրող Leetcode լուծման համար

Օրինակ

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

Բացատրությունը.

«10 #» -> «ժ», «11 #» -> «կ», «1» -> «ա», «2» -> «բ»:

s = "1326#"
"acz"

Բացատրությունը.

«1» -> «ա», «3» -> «գ», «26 #» -> «զ»:

Մոտեցում

Մենք տեսնում ենք, որ մենք պարզապես պետք է մտահոգվենք «#» - ով: Երբ տրված տողը անցնում ենք ձախից աջ ՝ օգտագործելով հաշվիչ (թող i), ապա յուրաքանչյուր i ցուցիչի համար (0 <= i <= n-3), մենք պարզապես պետք է ստուգենք, թե արդյոք նիշը հաջորդ ինդեքսի կողքին է այսինքն `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-ում char- ն արդեն կլիներ «#», ապա n-3 ինդեքսից հետո մենք դուրս կգանք օղակից, այլապես երկուսն էլ նիշերը `n-2: և n-1-ը պետք է քարտեզագրվեն առանձին:

Իրականացման

C ++ ծրագիր այբուբենից ամբողջ տողերի վերծանման համար Leetcode լուծման համար ամբողջ քարտեզագրման համար

#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 լուծման վերծանման տողի համար

Timeամանակի բարդություն

Վրա): Քանի որ մենք մեր մուտքային տողը գծայինորեն անցնում ենք ձախից աջ, այդպիսով O (n) ժամանակ կխնայվի:

Տիեզերական բարդություն 

Վրա): Մենք օգտագործել ենք լարերի կառուցող ջավայի և լարերի հոսքի դեպքում `cpp- ում: Ամենավատ դեպքում, ապա երկարությունը հավասար կլինի մուտքի տողի երկարությանը: Այսպիսով, տիեզերական բարդությունը նույնպես O (n) է: