首页 > 其他分享 >BM69 把数字翻译成字符串

BM69 把数字翻译成字符串

时间:2024-08-12 11:56:10浏览次数:9  
标签:pre cnt 数字 nums int 字符串 翻译成 BM69 dp

1.题目描述

有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。

现在给一串数字,返回有多少种可能的译码结果

数据范围:字符串长度满足 0<n≤900<n≤90

进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

示例1

输入:

"12"

返回值:

2

说明:

2种可能的译码结果(”ab” 或”l”)  

示例2

输入:

"31717126241541717"

返回值:

192

说明:

192种可能的译码结果  

2.解题思路

动态规划dp数组的含义:dp[i]表示以nums[i]为结尾的子串所能翻译的可能结果种类数;

以num = "1234"为例,因为第一位数字为1不是0,所以初始化dp[0]=1;

接下来对于2,3,4的遍历,每一次都要统计当前遍历的数字以及它和前一位数字的组合,遍历3时,因为它为3,且和前一个数字组合为23,都满足[1,26]范围,所以cnt = 2,那么当前dp[i] = dp[i-1] + dp[i-2],可以理解为:dp[i-1]就是只将当前位数字进行翻译成字母,剩下i-1位为一个整体,这种方案数就有dp[i-1]种;dp[i-2]就是将当前位数字和它的前一位进行组合后翻译成字母,剩下i-2位为一个整体,这种方案数就有dp[i-2]种;因此dp[i]是dp[i-1]+dp[i-2]的结果。如果cnt = 1,则dp[i] = dp[i-1]就无法再通过组合当前字符与前一个字符获得结果。

3.代码实现

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        // write code here
        int n = nums.length();
        //初始化
        int[] dp = new int[n];
        if (nums.charAt(0) - '0' == 0) {
            dp[0] = 0;
        } else {
            dp[0] = 1;
        }
        for (int i = 1; i < n; i++) {
            int cnt = 0;
            int cur = nums.charAt(i) - '0';
            if (cur != 0) {
                cnt += 1;
            }
            int pre = Integer.parseInt(nums.substring(i - 1, i + 1));
            if (pre >= 1 && pre <= 26 && cur != pre) {
                cnt += 1;
            }
            if (i == 1 || cnt == 0) {
                dp[i] = cnt;
            } else if (cnt == 1){
                dp[i] = dp[i-1];
            } else {
                dp[i] = dp[i-1] + dp[i-2];
            }    
        }
        return dp[n - 1];
    }
}

标签:pre,cnt,数字,nums,int,字符串,翻译成,BM69,dp
From: https://blog.csdn.net/cqjnovo/article/details/141127187

相关文章

  • 洛谷 4道水题 题解(字符串入门)
    题目目录:No.1 B2109统计数字字符个数 No.2 B2110找第一个只出现一次的字符 No.3 B2111基因相关性No.4 B2113输出亲朋字符串OK开始正文!第一题:B2109统计数字字符个数题目描述输入一行字符,统计出其中数字字符的个数。输入格式一行字符串,总长度不超过 255。......
  • 【C语言】字符函数和字符串函数
    目录一、字符函数(1)字符分类函数(2)字符转换函数二、字符串函数(1)strlen①函数原型②注意事项③模拟实现函数(2)strcpy①函数原型②注意事项③模拟实现函数(3)strcat①函数原型②注意事项③模拟实现函数(4)strcmp①函数原型②模拟实现函数(5)strncpy①函......
  • C/C++数字与字符串互相转换
    前言:在C/C++程序中,会需要把数字与字符串做出互相转换的操作,用于实现程序想要的效果。下面将介绍多种方法实现数字与字符串互相转换。字符串转为数字一、利用ASCII我们知道每个字符都有一个ASCII码,利用这一点可以将字符-'0'转为数字。在字母大小写转换时也可以利用这个性质......
  • Java中字符串的常量池
    计算机存储中存在一个堆区域,堆区域中存在一个常量池,当申请了字符串变量后,会将值放入常量池中,下次申请新的变量时,会优先从常量池中查找,如果常量池中已经存在,则变量会直接指向常量池中的值,从而节省空间(jdk1.8之后的字符串常量池存在于堆中) Stringx1="aaa";//在常量池......
  • 常见 字符串库函数 的使用与模拟实现 #strlen #strcpy #strcat #strcmp#strstr #strto
    文章目录前言路漫漫其修远兮,吾将上下而求索。在C语言之中,提供了字符类型,也有字符串的概念,但是却并没有字符串的类型。没有类型就不方便操作,于是乎就提供了一系列的字符串函数来支持对字符串的操作;一、求字符串长度strlen专门用来求字符串长度的函数size_t strl......
  • 字符串逆序(递归实现)
    题目内容: 编写一个函数reverse_string(char*string)(逆序实现) 实现:将参数字符串中的字符反向排列,不是逆序打印。 要求:不能使用C函数库中的字符串操作函数 比如:char[]="abcdef"   逆序之后是数组内容变成:"fedcba";非函数:#include<stdio.h>intmain(){ ch......
  • C++ int32, int64 和十六进制字符串的转换
       #include<iostream>#include<string>#include<cstring>//用于memset,strlen#include<algorithm>/***@brife:将一个int64数字转为十六进制字符串*@note:int64Value:0,hexStr:0000000000000000int64Value:-1,h......
  • 指针、字符串函数
    (一)指针操作一维字符型数组const关键字(只读)eg:(1)int *p;  //基类型(目标类型)(2)int a= 10;   ①const int *p=&a;  //const限定是基类型,表示不能通过*p的方式修改基类型的数据   ②int const *p=&a;  //与①等价     ......
  • 每天深解一个字符串类函数之strcat函数
    目录前言:一、引用头文件二、strcat函数的作用三、理解strcat函数的定义1、返回类型2、参数四、使用strcat函数1、编写代码2、调试运行控制台监视器五、注意要点六、模拟实现前言:每天深入了解一个字符串类函数今天我们要学习的是strcat函数,一个追加字符串......
  • leetcode-12 字符串
    12.2字符串比较242有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。//解法1:排序后逐个比较字符boolisAnagram(strings,stringt){if(s.length()......