【笔试刷题】移动-2025.11.09-改编真题

✅ 秋招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线180+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

移动-2025.11.09

题目一:镜像字符串的最小修改

1️⃣:计算字符串长度的一半

2️⃣:遍历前半段,统计与后半段不匹配的字符对数量

3️⃣:不匹配的对数即为最小修改次数

难度:简单

题目二:数值倍增的最短路径

1️⃣:判断 是否能被 整除,不能则无解

2️⃣:枚举 的幂次 ,对每个 计算剩余部分能否用 的幂次表示

3️⃣:找到使 最小的组合

难度:中等

1. 镜像字符串的最小修改

问题描述

K 小姐在研究字符串的对称性时,发现了一种特殊的字符串结构——镜像字符串。如果一个长度为偶数的字符串,它的前半部分和后半部分完全相同,那么就称这个字符串为镜像字符串。

例如:""、""、"" 都是镜像字符串,因为它们的前半段和后半段是完全相同的。

现在 K 小姐手里有一个长度为偶数的字符串,她可以进行任意次修改操作,每次操作可以选择字符串中的某个字符,将其改为任意的字符。

请你帮助 K 小姐计算,至少需要进行多少次修改操作,才能将这个字符串变成镜像字符串?

输入格式

一行包含一个长度为偶数的字符串 ,字符串仅由小写英文字母组成。

输出格式

输出一个整数,表示将字符串变成镜像字符串所需的最少修改次数。

样例输入

abhabh
abagba

样例输出

0
1

数据范围

  • 为偶数
  • 字符串仅由小写英文字母组成
样例 解释说明
样例1 字符串 "" 本身就是镜像字符串,前半段 "" 和后半段 "" 完全相同,因此不需要任何修改,输出
样例2 字符串 "" 的前半段是 "",后半段是 ""。对比可知,第二个位置的字符不同(),只需要修改 次即可让前后半段相同,输出

题解

这道题的核心思路很简单:既然要让字符串变成镜像字符串,那就要保证前半段和后半段完全相同。

假设字符串长度为 ,我们把字符串分成两半:前半段是位置 ,后半段是位置 。要让这个字符串成为镜像字符串,只需要让每一对对应位置的字符相同即可,也就是让 对于所有 都相等。

对于每一对位置

  • 如果 ,这一对已经相同,不需要修改
  • 如果 ,这一对不同,需要修改其中一个字符

因此,答案就是统计有多少对位置上的字符不相同。

具体算法步骤:

  1. 读入字符串 ,计算其长度的一半
  2. 遍历前半段的每个位置 (从
  3. 比较 是否相同
  4. 统计不相同的对数,即为答案

时间复杂度,只需要遍历一次字符串的前半部分。对于长度不超过 的字符串,这个复杂度完全可以接受。

空间复杂度,只使用了常数级别的额外空间。

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

# 读入字符串
s = input()
# 计算字符串长度的一半
half = len(s) // 2
# 统计不相同的字符对数量
cnt = 0

# 遍历前半段的每个位置
for i in range(half):
    # 如果对应位置的字符不同,计数加一
    if s[i] != s[i + half]:
        cnt += 1

# 输出最小修改次数
print(cnt)
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    string s;
    cin >> s;
    
    // 获取字符串长度的一半
    int n = s.size() / 2;
    int ans = 0;
    
    // 遍历前半段,统计不匹配的字符对
    for (int i = 0; i < n; i++) {
        // 如果前后对应位置字符不同,答案加一
        if (s[i] != s[i + n]) {
            ans++;
        }
    }
    
    // 输出结果
    cout << ans << endl;
    
    return 0;
}
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 读入字符串
        String s = sc.next();
        
        // 计算字符串长度的一半
        int half = s.length() / 2;
        int result = 0;
        
        // 遍历前半段的每个位置
        for (int i = 0; i < half; i++) {
            // 比较对应位置的字符是否相同
            if (s.charAt(i) != s.charAt(i + half)) {
                result++;
            }
        }
        
        // 输出最小修改次数
        System.out.println(result);
        
        sc.close();
    }
}

2. 数值倍增的最短路径

问题描述

A 先生是一位数学家,他在研究一个有趣的数值变换问题。他手里有一台特殊的计算器,这台计算器只能执行两种操作:

  • 操作一:将当前数字乘以
  • 操作二:将当前数字乘以

现在 A 先生有一个初始数字 ,他希望通过若干次操作将这个数字变成目标数字 。每次操作可以选择执行操作一或操作二,操作次数不限。

A 先生想知道,从 变换到 ,最少需要执行多少次操作?如果无论如何都无法达到目标数字 ,则输出

输入格式

一行包含四个正整数 ,用空格隔开,分别表示乘数 、乘数 、初始数字 和目标数字

输出格式

输出一个

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

只会按tab的bug...:高中:这个班高考人均985,我考不上985是不是很丢人啊? 考上985本: 班里人均保研985硕了,我保不上是不是很丢人啊? 985本硕:班里人均bat了,我进不去是不是很丢人啊?进了大厂:组里人均p8年薪200w,我拿不到是不是很丢人啊?拿了p8和200w: 身边人都买房买车结婚生子了,我还没买房是不是很丢人啊?你有没有发现,每当你达到下一个目标时,你身边的人必然都是和你同个层次同样优秀的人,如果你陷入这种不断的比较,你永远会不满足。事实就是,当你拿到一个阶段的成就的时候,你就已经超过很多人很厉害很优秀了,你是不需要下一个阶段的成功来证明自己的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务