最少前缀操作问题|豆包MarsCode AI刷题;

106 阅读3分钟

题目 :最少前缀操作问题

问题描述

小U和小R有两个字符串,分别是S和T,现在小U需要通过对S进行若干次操作,使其变成T的一个前缀。操作可以是修改S的某一个字符,或者删除S末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让S变成T的前缀。

测试样例

样例1:

输入:S = "aba", T = "abb"
输出:1

样例2:

输入:S = "abcd", T = "efg"
输出:4

样例3:

输入:S = "xyz", T = "xy"
输出:1

题目分析

求解题目的条件有两个 :

  1. 长度 :

    1. 如果长度不同 S.length > T.length ,先对其进行减去使得两个字符串长度相同。(直接遍历T.length的长度,对于差的长度直接加到次数中就行)
    2. 长度 S.length<= T.length , 对比每一个元素不同进行改(就是把次数+不同的个数就行)
  2. 元素是否相同。

条件变量设计

  1. count 记录改变的次数。对于长度较小的使用n记录需要遍历的位数。
  2. 对于count 的记录分为两部分 1)长度不同删除次数2)元素不同修改次数

代码实现

public class Main {
    public static int solution(String S, String T) {
        // write code here
        int count =0 ;
        int n =0 ;

        if (S.length() >=T.length()) {
            count += S.length()-T.length();
            n=T.length();
        }else {
            n= S.length();
        }
        for (int i = 0; i <n; i++) {
            if (S.charAt(i) != T.charAt(i)) {
            count ++;
            }
        }
        System.out.println(count);
        return count;
    }
    public static void main(String[] args) {
        System.out.println(solution("aba", "abb") == 1);
        System.out.println(solution("abcd", "efg") == 4);
        System.out.println(solution("xyz", "xy") == 1);
        System.out.println(solution("hello", "helloworld") == 0);
        System.out.println(solution("same", "same") == 0);
    }
}

代码逻辑分析

  1. 初始化变量

    • count:用于记录操作的总次数。
    • n:用于记录比较的字符串长度,取S和T中较短的长度。
  2. 处理长度差异

    • 如果S的长度大于或等于T的长度,那么计算出S比T多出来的长度,并将这个值加到count上,然后将n设置为T的长度。
    • 如果S的长度小于T的长度,那么n就设置为S的长度。
  3. 字符比较

    • 通过一个循环,比较S和T的前n个字符。如果字符不同,则count加1。
  4. 输出和返回

    • 打印并返回count的值。

时间复杂度分析

  • 循环:代码中有一个循环,循环次数为n,即S和T中较短字符串的长度。
  • 字符比较:每次循环中,有一个字符比较操作。
  • 总时间复杂度:因此,总的时间复杂度是O(n),其中n是S和T中较短字符串的长度。

空间复杂度分析

  • 变量存储:代码中只使用了常数个额外变量(countn),没有使用额外的数据结构来存储数据。
  • 总空间复杂度:因此,总的空间复杂度是O(1),即常数级别的空间复杂度。

学习计划

  1. 目标与时间管理:每天安排3-5道题,难度要多样化,用豆包MarsCode AI的“每日推荐”来帮助规划。

  2. 深度学习与记录:对错题要深入分析,用豆包MarsCode的解析功能找出弱点,并记在笔记里。

  3. 分步解决问题:复杂题目拆分成小任务,用AI提示逐步攻克。

对于错题:

  • 定期复习:常回头看看错题,加强记忆易错点。
  • 代码对比:把自己的代码和标准答案对比,找出不同之处。

总结

使用豆包MarsCode AI工具后,我的解题速度、知识整理和错题分析都有了很大提高。接下来,我打算继续利用AI功能和传统资源,加强基础并挑战更难的题目。

希望我的分享对其他初学者也有帮助,让我们一起享受学习算法的乐趣!