문자열을 알파벳에서 정수 매핑 Leetcode 솔루션으로 해독


난이도 쉽게
자주 묻는 질문 경구 세일즈 포스

문제 정책

이 문제에서는 숫자 (0-9)와 '#'이 포함 된 문자열이 제공됩니다. 다음 매핑을 사용하여이 문자열을 소문자 영문 문자열로 변환해야합니다.

문자열을 알파벳에서 정수 매핑 Leetcode 솔루션으로 해독

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

설명 :

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

s = "1326#"
"acz"

설명 :

"1"-> "a", "3"-> "c", "26 #"-> "z".

접근

우리는 단지 '#'에 대해 걱정해야한다는 것을 알 수 있습니다. 카운터 (let 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"로 변환하고 스트링 빌더 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은 별도로 매핑되어야합니다.

실시

알파벳에서 정수 매핑 Leetcode 솔루션으로 문자열을 해독하는 C ++ 프로그램

#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 솔루션으로 해독하는 Java 프로그램

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) 시간이 걸립니다.

공간 복잡성 

의 위에): cpp에서 java 및 string stream의 경우 문자열 작성기를 사용했습니다. 최악의 경우 길이는 입력 문자열 길이와 동일합니다. 따라서 공간 복잡성도 O (n)입니다.