gpt4 book ai didi

algorithm - 从给定的移动数字键盘序列中计算所有可能的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:08:22 24 4
gpt4 key购买 nike

如何计算可以由给定数字序列(从 2-9)形成的所有可能字符串,其中每个数字代表一个移动按钮并映射到 3/4 字母表。例如:- 2 映射到 A,B,C,通过按 2 键 3 次“222”,可以组成的字符串有 {"AAA","AB","BA","C"}。输入=“2233”,可能的字符串={“AADD”,“AAE”,“BDD”,“BE”}。

我需要一个伪代码来实现上述问题。

最佳答案

enter image description here

算法/直觉:

  • 如上图所示,对于一个数字,有 3-4 种可能性。
  • 如果我们按同一个数字 2 次、3 次或 4 次,我们会在显示屏上看到不同的字符。
  • 比如,如果我们按 2
    • 1 次 - a
    • 2 次 - b
    • 3 次 - c
  • 因此,当我们计算/计算可能子串的数量时,我们需要将 subproblem(i-2),subproblem(i-3),subproblem(i-4) 值添加到我们的如果发生 i = i-1 = i-2 的总计数。
  • 例如,我们以222为例。我们将采用自上而下的方法。
  • 222 中的第一个2 只有一种可能性(即输入a)。
  • 对于 222 中的第二个 2,它可以给我们 a 或者 2 是按 2 次给我们一个 b。因此,组合可以是 aab
  • 对于 222 中的第三个 2,它可以是 ab(如果从第二个 2) 或 c
  • 因此,不。每个索引的组合 i 是 no 的总和。从 ii-3i-4 的匹配项,具体取决于编号。每个数字在键盘中代表的字符数。
  • 请注意,如果第 ith 个字符与 i-1 匹配,那么我们添加 dp[i-2] 而不是 dp[i-1] 因为 i-1 到 i 表示单个字符(多次按下时)。

代码:

import static java.lang.System.out;
public class Solution{
public static int possibleStringCount(String s){
int len = s.length();
int[] dp = new int[len];
dp[0] = 1;// possibility is 1 for a single character
for(int i=1;i<len;++i){
int possible_chars_length = numberOfRepresentedCharacters(s.charAt(i)-'0') - 1;// because current character itself counts as 1.
dp[i] = 0;
for(int j=i;j>=0;j--){
if(i - possible_chars_length > j) break;
if(s.charAt(i) == s.charAt(j)){
if(j-1 > -1){
dp[i] += dp[j-1];
}else{
dp[i] += 1;// if there are no combinations before it, then it represents a single character
}
}
}
}

return dp[len-1];
}

private static int numberOfRepresentedCharacters(int digit){
if(digit == 7 || digit == 9) return 4;
return 3;// it is assumed that digits are between 2-9 always
}

public static void main(String[] args) {
String[] tests = {
"222","2233","23456789","54667877","5466","7777","22","7898989899","77779999"
};

for(String testcase : tests){
out.println(testcase + " : " + possibleStringCount(testcase));
}
}
}

输出:

222 : 4
2233 : 4
23456789 : 1
54667877 : 8
5466 : 2
7777 : 8
22 : 2
7898989899 : 26
77779999 : 64

关于algorithm - 从给定的移动数字键盘序列中计算所有可能的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53373675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com