Skip to content

Latest commit

 

History

History

1946.Largest Number After Mutating Substring

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

English Version

题目描述

给你一个字符串 num ,该字符串表示一个大整数。另给你一个长度为 10下标从 0  开始 的整数数组 change ,该数组将 0-9 中的每个数字映射到另一个数字。更规范的说法是,数字 d 映射为数字 change[d]

你可以选择 突变  num 的任一子字符串。突变 子字符串意味着将每位数字 num[i] 替换为该数字在 change 中的映射(也就是说,将 num[i] 替换为 change[num[i]])。

请你找出在对 num 的任一子字符串执行突变操作(也可以不执行)后,可能得到的 最大整数 ,并用字符串表示返回。

子字符串 是字符串中的一个连续序列。

 

示例 1:

输入:num = "132", change = [9,8,5,0,3,6,4,2,6,8]
输出:"832"
解释:替换子字符串 "1":
- 1 映射为 change[1] = 8 。
因此 "132" 变为 "832" 。
"832" 是可以构造的最大整数,所以返回它的字符串表示。

示例 2:

输入:num = "021", change = [9,4,3,5,7,2,1,9,0,6]
输出:"934"
解释:替换子字符串 "021":
- 0 映射为 change[0] = 9 。
- 2 映射为 change[2] = 3 。
- 1 映射为 change[1] = 4 。
因此,"021" 变为 "934" 。
"934" 是可以构造的最大整数,所以返回它的字符串表示。 

示例 3:

输入:num = "5", change = [1,4,7,5,3,2,5,6,9,4]
输出:"5"
解释:"5" 已经是可以构造的最大整数,所以返回它的字符串表示。

 

提示:

  • 1 <= num.length <= 105
  • num 仅由数字 0-9 组成
  • change.length == 10
  • 0 <= change[d] <= 9

解法

Python3

class Solution:
    def maximumNumber(self, num: str, change: List[int]) -> str:
        find = False
        nums = list(num)
        for i, c in enumerate(num):
            if int(c) < change[int(c)]:
                nums[i] = str(change[int(c)])
                find = True
            elif find and int(c) == change[int(c)]:
                continue
            elif find:
                break
        return ''.join(nums)

Java

class Solution {
    public String maximumNumber(String num, int[] change) {
        boolean find = false;
        char[] nums = num.toCharArray();
        for (int i = 0; i < num.length(); ++i) {
            int c = num.charAt(i) - '0';
            if (c < change[c]) {
                nums[i] = (char) ('0' + change[c]);
                find = true;
            } else if (find && c == change[c]) {
                continue;
            } else if (find) {
                break;
            }
        }
        return new String(nums);
    }
}

...