将字符串从字母解密为整数映射Leetcode解决方案


难度级别 易得奖学金
经常问 讽刺 Salesforce的

问题陈述

在这个问题中,我们给了一个包含数字(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”,并将其附加到 字符串生成器 某人
为了将字符串“ 12”转换为字符“ l”,我们创建了一个转换函数,该函数采用字符串格式的数字并将其转换为相应的字符。
并且如果索引i + 2处的字符不是'#',则我们不应将索引i处的字符与索引i + 1处的字符组合在一起。

例如“ 123”,如果我们从索引i = 0看到索引i + 2,即2处的字符不是“#”,那么我们将在答案中附加字符“ 1”的转换。

对于索引n-2和n-1处的字符,我们可以说,如果n-1处的字符已经是'#',那么我们将在索引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解决方案的复杂性分析

时间复杂度

上): 因为我们从左到右线性遍历输入字符串,所以将花费O(n)时间。

空间复杂度 

上): 在Java和cpp中的字符串流的情况下,我们已经使用了字符串生成器。 在最坏的情况下,长度将与输入字符串的长度相同。 因此,空间复杂度也是O(n)。