返回介绍

solution / 2300-2399 / 2325.Decode the Message / README_EN

发布于 2024-06-17 01:03:07 字数 6483 浏览 0 评论 0 收藏 0

2325. Decode the Message

中文文档

Description

You are given the strings key and message, which represent a cipher key and a secret message, respectively. The steps to decode message are as follows:

  1. Use the first appearance of all 26 lowercase English letters in key as the order of the substitution table.
  2. Align the substitution table with the regular English alphabet.
  3. Each letter in message is then substituted using the table.
  4. Spaces ' ' are transformed to themselves.
  • For example, given key = "happy boy" (actual key would have at least one instance of each letter in the alphabet), we have the partial substitution table of ('h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f').

Return _the decoded message_.

 

Example 1:

Input: key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
Output: "this is a secret"
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in "the quick brown fox jumps over the lazy dog".

Example 2:

Input: key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
Output: "the five boxing wizards jump quickly"
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in "eljuxhpwnyrdgtqkviszcfmabo".

 

Constraints:

  • 26 <= key.length <= 2000
  • key consists of lowercase English letters and ' '.
  • key contains every letter in the English alphabet ('a' to 'z') at least once.
  • 1 <= message.length <= 2000
  • message consists of lowercase English letters and ' '.

Solutions

Solution 1

class Solution:
  def decodeMessage(self, key: str, message: str) -> str:
    d = {" ": " "}
    i = 0
    for c in key:
      if c not in d:
        d[c] = ascii_lowercase[i]
        i += 1
    return "".join(d[c] for c in message)
class Solution {
  public String decodeMessage(String key, String message) {
    char[] d = new char[128];
    d[' '] = ' ';
    for (int i = 0, j = 0; i < key.length(); ++i) {
      char c = key.charAt(i);
      if (d[c] == 0) {
        d[c] = (char) ('a' + j++);
      }
    }
    char[] ans = message.toCharArray();
    for (int i = 0; i < ans.length; ++i) {
      ans[i] = d[ans[i]];
    }
    return String.valueOf(ans);
  }
}
class Solution {
public:
  string decodeMessage(string key, string message) {
    char d[128]{};
    d[' '] = ' ';
    char i = 'a';
    for (char& c : key) {
      if (!d[c]) {
        d[c] = i++;
      }
    }
    for (char& c : message) {
      c = d[c];
    }
    return message;
  }
};
func decodeMessage(key string, message string) string {
  d := [128]byte{}
  d[' '] = ' '
  for i, j := 0, 0; i < len(key); i++ {
    if d[key[i]] == 0 {
      d[key[i]] = byte('a' + j)
      j++
    }
  }
  ans := []byte(message)
  for i, c := range ans {
    ans[i] = d[c]
  }
  return string(ans)
}
function decodeMessage(key: string, message: string): string {
  const d = new Map<string, string>();
  for (const c of key) {
    if (c === ' ' || d.has(c)) {
      continue;
    }
    d.set(c, String.fromCharCode('a'.charCodeAt(0) + d.size));
  }
  d.set(' ', ' ');
  return [...message].map(v => d.get(v)).join('');
}
use std::collections::HashMap;
impl Solution {
  pub fn decode_message(key: String, message: String) -> String {
    let mut d = HashMap::new();
    for c in key.as_bytes() {
      if *c == b' ' || d.contains_key(c) {
        continue;
      }
      d.insert(c, char::from((97 + d.len()) as u8));
    }
    message
      .as_bytes()
      .iter()
      .map(|c| d.get(c).unwrap_or(&' '))
      .collect()
  }
}
char* decodeMessage(char* key, char* message) {
  int m = strlen(key);
  int n = strlen(message);
  char d[26];
  memset(d, ' ', 26);
  for (int i = 0, j = 0; i < m; i++) {
    if (key[i] == ' ' || d[key[i] - 'a'] != ' ') {
      continue;
    }
    d[key[i] - 'a'] = 'a' + j++;
  }
  char* ans = malloc(n + 1);
  for (int i = 0; i < n; i++) {
    ans[i] = message[i] == ' ' ? ' ' : d[message[i] - 'a'];
  }
  ans[n] = '\0';
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文