LeetCode 3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了

【LetMeFly】3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了

力扣题目链接:https://leetcode.cn/problems/check-if-digits-are-equal-in-string-after-operations-i/

给你一个由数字组成的字符串 s 。重复执行以下操作,直到字符串恰好包含 两个数字:

  • 从第一个数字开始,对于 s 中的每一对连续数字,计算这两个数字的和 10。
  • 用计算得到的新数字依次替换 s 的每一个字符,并保持原本的顺序。

如果 s 最后剩下的两个数字 相同 ,返回 true 。否则,返回 false

示例 1:
输入: s = "3902"

输出: true

解释:

  • 一开始,s = "3902"
  • 第一次操作:
    • (s[0] + s[1]) % 10 = (3 + 9) % 10 = 2
    • (s[1] + s[2]) % 10 = (9 + 0) % 10 = 9
    • (s[2] + s[3]) % 10 = (0 + 2) % 10 = 2
    • s 变为 "292"
  • 第二次操作:
    • (s[0] + s[1]) % 10 = (2 + 9) % 10 = 1
    • (s[1] + s[2]) % 10 = (9 + 2) % 10 = 1
    • s 变为 "11"
  • 由于 "11" 中的数字相同,输出为 true

示例 2:
输入: s = "34789"

输出: false

解释:

  • 一开始,s = "34789"
  • 第一次操作后,s = "7157"
  • 第二次操作后,s = "862"
  • 第三次操作后,s = "48"
  • 由于 '4' != '8',输出为 false

提示:

  • 3 <= s.length <= 100
  • s 仅由数字组成。

解题方法:模拟:等II的时候再使用更低时间复杂度的算法吧

当数组长度大于2时,不断取相邻两个元素求和并对10取模,最终返回剩下的两个元素是否相同。

tips1:若真的使用字符来一直模拟,可以提前算出两个'0'和一个`````的ASCII码相等。

tips:也可以使用int8或int数组来存储,不用真的一直字符串操作。

  • 时间复杂度 O ( l e n ( s ) 2 ) O(len(s)^2) O(len(s)2)
  • 空间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2025-10-23 23:24:34
 */
/*
>>> ord('0')
48
>>> ord('0') * 2
96
>>> chr(96)   
'`'
>>> ord('`')
96
*/
class Solution {
public:
    bool hasSameDigits(string s) {
        while (s.size() > 2) {
            string newS;
            for (int i = 1; i < s.size(); i++) {
                // cout << '(' << s[i - 1] << '+' << s[i] << " - '`') % 10 + '0' = " << char((s[i - 1] + s[i] - '`') % 10 + '0') << endl;
                newS.push_back((s[i - 1] + s[i] - '`') % 10 + '0');
            }
            s = move(newS);
            // cout << s << endl;
        }
        return s[0] == s[1];
    }
};
Python
python 复制代码
'''
LastEditTime: 2025-10-23 23:28:23
'''
class Solution:
    def hasSameDigits(self, s: str) -> bool:
        a = list(map(lambda c: ord(c) - ord('0'), s))
        while len(a) > 2:
            b = [0] * (len(a) - 1)
            for i in range(len(a) - 1):
                b[i] = (a[i] + a[i + 1]) % 10
            a = b
        return a[0] == a[1]
Java
java 复制代码
/*
 * @LastEditTime: 2025-10-23 23:42:40
 */
class Solution {
    public boolean hasSameDigits(String s) {
        int[] a = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            a[i] = (s.charAt(i) - '0');
        }
        while (a.length > 2) {
            int[] b = new int[a.length - 1];
            for (int i = 0; i < b.length; i++) {
                b[i] = (a[i] + a[i + 1]) % 10;
            }
            a = b;
        }
        return a[0] == a[1];
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2025-10-23 23:32:07
 */
package main

func hasSameDigits(s string) bool {
    a := make([]byte, len(s))
    for i := range s {
        a[i] = s[i] - '0'
    }
    for len(a) > 2 {
        b := make([]byte,len(a) - 1)
        for i := range b {
            b[i] = (a[i] + a[i + 1]) % 10
        }
        a = b
    }
    return a[0] == a[1]
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2025-10-23 23:46:40
 */
impl Solution {
    pub fn has_same_digits(s: String) -> bool {
        let mut a: Vec<u8> = s.chars()
            .map(|c| c.to_digit(10).unwrap() as u8)
            .collect();
        while a.len() > 2 {
            let mut b = Vec::with_capacity(a.len() - 1);
            for i in 0..a.len() - 1 {
                b.push((a[i] + a[i + 1]) % 10);
            }
            a = b;
        }
        a[0] == a[1]
    }
}

End

今天发现CSDN给我发私信说准备把我一些文章变为VIP可见,实在受之有愧,故拒绝之。

可能是因为快1024了官方想要再整一些活动吧。

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
smj2302_796826527 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
_深海凉_11 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录12 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
superior tigre15 小时前
78 子集
算法·leetcode·深度优先·回溯
superior tigre17 小时前
739 每日温度
算法·leetcode·职场和发展
6Hzlia17 小时前
【Hot 100 刷题计划】 LeetCode 15. 三数之和 | C++ 排序+双指针
c++·算法·leetcode
北顾笙98018 小时前
day37-数据结构力扣
数据结构·算法·leetcode
6Hzlia21 小时前
【Hot 100 刷题计划】 LeetCode 189. 轮转数组 | C++ 三次反转经典魔法 (O(1) 空间)
c++·算法·leetcode
m0_6294947321 小时前
LeetCode 热题 100-----13.最大子数组和
数据结构·算法·leetcode
田梓燊1 天前
力扣:94.二叉树的中序遍历
数据结构·算法·leetcode