【备战秋招】每日一题:4月15日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/18 3:37:19

 为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-字符串前缀

在线评测链接:P1235

题目内容

塔子哥是一名优秀的软件工程师,他的公司最近接到了一个新项目,需要在短时间内实现一个新的字符串匹配功能。

在这个项目中,有两个字符串 ST,需要将字符串 S 变换成字符串 T 的一个前缀。这个任务非常重要,因为它将决定整个项目的成功与否。

为了完成这个任务,塔子哥开始进行了大量的研究和分析。他发现,每次操作可以修改 S 的一个字符,也可以删除一个 S 末尾的字符,这样才能将 S 变换成 T 的前缀。

现在塔子哥需要写一段程序,来输出最少需要操作的次数。

输入描述

第一行一个正整数 t ,表示数据组数;

对于每一组数据输入两行仅包含小写字母的字符串 ST

1\le S.length(),T.length()\le 5\times 10^41\le t \le10

输出描述

对于每一组数据,输出一个整数,表示最少需要操作的次数。

样例

输入

2
aba
abb
abcd
efg

输出

1
4

样例解释

第一组数据,可以修改最后一个字母,使得 S=abb ,是 T 的一个前缀;

第二组数据,需要将 S 整个串删除,操作次数为 4 。

思路

思维 + 贪心

当 len(s) > len(t) ,s 中第 len(t) + 1 到 len(s) 这些字符都必须删除。

接下来我们考虑 [1, min(len(s, len(t)))] 的部分。 因为删除只能删除最后一个,所以删除一个字符前,必须删除其后面的所有字符,但是其后面的字符中,可能存在字符和 t 中对应位置的字符相等。

所以最好的操作就是遇到不同的字符则修改。

时间复杂度:O(n)

类似题目推荐

这里推荐几道贪心题目

Leetcode

LeetCode上的贪心题,代码随想录总结的非常好了,见 贪心 - 代码随想录

Codefun2000

  1. P1091. 米哈游 2023.03.19-第一题-交换字符

  2. P1235. 百度 2023.04.15-实习-第一题-字符串前缀

  3. P1005. 腾讯 2022.10.16-汽车

  4. P1137 美团 2023.04.01-第一题-整理

  5. P1077 美团 2023.3.11-第一题-字符串修改

  6. P1024 百度 2022.9.13-01反转

  7. P1089 美团 2023.3.18.10点-第三题-塔子哥的回文串

代码

CPP

#include <bits/stdc++.h>
using namespace std;
​
const int N = 50010;
char s[N], t[N];
int ns, nt;
int n;
​
void solve() {
    scanf("%s%s", s + 1, t + 1);
    ns = strlen(s + 1), nt = strlen(t + 1);
​
    int ans = 0;
    // 如果 s 的长度大于 t 的长度,那么从 s[nt + 1] 到 s[ns] 必然都要删除
    if (ns > nt) ans += ns - nt, ns = nt;
​
    // 如果 s[i] != t[i] ,既然删除(只能修改末字符)和修改的代价相同,不如全部修改
    for (int i = 1; i <= ns; ++i)
        if (s[i] != t[i]) ans += 1;
    printf("%d\n", ans);
}
​
int main()
{
    int T;
    scanf("%d", &T);
    for (int i = 1; i <= T; ++i) {
        solve();
    }
    return 0;
}

python

T = int(input())
while T > 0:
    s = input()
    t = input()
​
    ns = len(s)
    nt = len(t)
​
    ans = 0
    # 如果 s 的长度大于 t 的长度,那么从 s[nt + 1] 到 s[ns] 必然都要删除
    if ns > nt:
        ans += ns - nt
        ns = nt
​
    for i in range(ns):
        # 如果 s[i] != t[i] ,既然删除(只能修改末字符)和修改的代价相同,不如全部修改
        if s[i] != t[i]:
            ans += 1
​
    print(ans)
​
    T -= 1

Java

import java.util.Scanner;
​
public class Main {
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
​
        int T = sc.nextInt();
        while (T-- > 0) {
            String s = sc.next();
            String t = sc.next();
​
            int ans = 0;
            // 如果 s 的长度大于 t 的长度,那么从 s[nt + 1] 到 s[ns] 必然都要删除
            int ns = s.length(), nt = t.length();
            if (ns > nt) {
                ans += ns - nt;
                ns = nt;
            }
​
            for (int i = 0; i < ns; ++i) {
                // 如果 s[i] != t[i] ,既然删除(只能修改末字符)和修改的代价相同,不如全部修改
                if (s.charAt(i) != t.charAt(i)) {
                    ans += 1;
                }
            }
​
            System.out.println(ans);
        }
    }
​
}

Go

package main
​
import (
    "fmt"
)
​
const N = 50010
​
func solve(s, t string) {
    ns, nt := len(s), len(t)
​
    ans := 0
    // 如果 s 的长度大于 t 的长度,那么从 s[nt + 1] 到 s[ns] 必然都要删除
    if ns > nt {
        ans += ns - nt
        ns = nt
    }
​
    // 如果 s[i] != t[i] ,既然删除(只能修改末字符)和修改的代价相同,不如全部修改
    for i := 0; i < ns; i++ {
        if s[i] != t[i] {
            ans += 1
        }
    }
    fmt.Printf("%d\n", ans)
}
​
func main() {
    var T int
    fmt.Scan(&T)
    for i := 0; i < T; i++ {
        var s, t string
        fmt.Scan(&s, &t)
        solve(s, t)
    }
}

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
    input += data;
    return;
});
process.stdin.on('end', () => {
    const lines = input.trim().split('\n');
    const N = 50010;
​
    function solve(s, t) {
        let ns = s.length;
        let nt = t.length;
        let ans = 0;
​
        // 如果 s 的长度大于 t 的长度,那么从 s[nt + 1] 到 s[ns] 必然都要删除
        if (ns > nt) {
            ans += ns - nt;
            ns = nt;
        }
​
        // 如果 s[i] != t[i] ,既然删除(只能修改末字符)和修改的代价相同,不如全部修改
        for (let i = 0; i < ns; i++) {
            if (s[i] !== t[i]) {
                ans += 1;
            }
        }
​
        console.log(ans);
    }
​
    const T = Number(lines[0]);
    for (let i = 0; i < T; i++) {
        s = lines[i * 2 + 1].trim()
        t = lines[i * 2 + 2].trim()
        solve(s, t);
    }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务 springcloud 09.整合feign到项目一个子服务中

01.项目结构如下&#xff1a; 02.修改sp04-orderservice项目&#xff0c;添加feign&#xff0c;调用item service和user service 1.sp04-orderservice项目的pom.xml 添加以下依赖: actuator feign hystrix <?xml version"1.0" encoding"UTF-8"?>…

全链路压测演进之迭代式压测

目录 1.背景原因 2.压测流程改进分析 3.迭代式压测流程 4.全流程压测模式演进 5.压测模式对比 6.迭代式压测反馈效果 7.总结 1.背景原因 !! 做系统服务压测都是比较耗时耗人力的&#xff0c;特别是在生产环境上做压测&#xff0c;压测的时间都是在晚上23点后&#xff0c…

Linux之线程安全(上)

文章目录 前言一、预备知识1.线程的ID2.局部存储的验证3.线程的封装 二、线程安全问题1.抢票程序2.问题分析 三、Linux线程互斥1.概念临界资源临界区互斥原子性 2.互斥量概念接口 3.mutex的使用全局锁的使用局部锁的使用 总结 前言 本文从一个模拟生活中的抢票程序的例子引入线…

经典的设计模式22——职责链模式

文章目录 职责链模式 老感觉职责链模式和状态模式有点像&#xff0c;好像都能实现请假流程。百度来一波。 真是巧了&#xff0c;职责链&#xff0c;状态&#xff0c;策略&#xff0c;则三个长得好像。 职责链模式 定义&#xff1a; 使多个对象都有机会处理请求&#xff0c;从…

循环神经网络RNN用于分类任务

RNN是一类拥有隐藏状态&#xff0c;允许以前的输出可用于当前输入的神经网络&#xff0c; 输入一个序列&#xff0c;对于序列中的每个元素与前一个元素的隐藏状态一起作为RNN的输入&#xff0c;通过计算当前的输出和隐藏状态。当前的影藏状态作为下一个单元的输入... RNN的种类…

AMEYA:如何设计好DC-DC电源,注意事项有哪些

DC-DC变换器&#xff08;DC-DC converter&#xff09;是指在直流电路中将一个电压值的电能变为另一个电压值的电能的装置。DC-DC的layout非常重要&#xff0c;会直接影响到产品的稳定性与EMI效果。 DC-DC电源几点经验以及规则 1、处理好反馈环&#xff0c;反馈线不要走肖特基下…

基于JavaWeb的体育赛事平台的设计与实现

摘要 体育是随着社会生产力的发展而产生和发展的&#xff0c;在其漫长的历史中&#xff0c;由于社会、政治和经济发展的影响&#xff0c;其内容、形式、功能和操作方法不断变化。奥运会和世界杯等大型体育赛事代表着体育发展的顶峰&#xff0c;因为它们不仅给组织者带来了巨大…

【考研复习】李春葆新编C语言习题与解析(错误答案订正)持续更新

新编C语言习题与解析 做习题时发现有些错误答案&#xff0c;写篇博客进行改正记录。不对地方欢迎指正&#xff5e; 第二章 C. 其中b的表达形式错误&#xff0c;若加上0x1e2b则正确。所以C错误。 D. e后为整数。指数命名规则&#xff1a;e前有数&#xff0c;后有整数。所以D错…

实验篇(7.2) 15. 站对站安全隧道 - 多条隧道聚合(FortiGate-IPsec) ❀ 远程访问

【简介】虽然隧道冗余可以解决连接问题&#xff0c;但是当大量数据访问或要求访问不能中断时&#xff0c;隧道冗余就力不从心了。这种情况就要用到隧道聚合。但是对宽带的要求也高了&#xff0c;双端都至少需要二条宽带。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ER…

C语言复合类型之结构(struct)篇(结构指针)

结构相关知识总结 什么是结构&#xff1f;结构的声明与简单使用结构的初始化结构中成员变量的访问结构的初始化器结构数组结构数组的声明结构数组的成员标识 结构的嵌套结构指针结构作为参数在函数中传递将结构成员作为参数进行传递将结构地址(指向结构的指针)作为参数进行传递…

AI数字人之语音驱动人脸模型Wav2Lip

1 Wav2Lip模型介绍 2020年&#xff0c;来自印度海德拉巴大学和英国巴斯大学的团队&#xff0c;在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》&#xff0c;在文章中&#xff0c;他们提出一个叫做Wav2Lip的AI模…

面试题:完败的面试,被虐得体无完肤

经过上一轮的面试&#xff0c;我信心一下子就建立起来了&#xff0c;说巧不巧&#xff0c;前几周正好看到美团校招&#xff0c;想着试一下也不会怎样&#xff0c;就找了学长要了内推码&#xff0c;试着投递了一下&#xff0c;然后就通知周六参加笔试&#xff0c;结果惨不忍睹。…

flv 报错 Unsupported codec in video frame: 12

视频播放器播放 flv 报错 [TransmuxingController] > DemuxException: type CodecUnsupported, info Flv: Unsupported codec in video frame: 12 原因 主要是因为我们的播放器不支持 H.265 视频编码&#xff1b; 解决办法 方法一&#xff1a;将设备端的视频编码改为 …

FPGA实现USB3.0 UVC 相机HDMI视频输出 基于FT602驱动 提供工程源码和QT上位机源码

目录 1、前言2、UVC简介3、FT602芯片解读4、我这儿的 FT601 USB3.0通信方案5、详细设计方案基于FT602的UVC模块详解 6、vivado工程详解7、上板调试验证8、福利&#xff1a;工程代码的获取 1、前言 目前USB3.0的实现方案很多&#xff0c;但就简单好用的角度而言&#xff0c;FT6…

基于多层感知机MLP的数据预测与误差分析的完整matlab代码分享

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构。多层感知器(multilayer Perceptron,MLP)是指可以是感知器的人工神经元组成的多个层次。MPL的…

在Windows和Linux系统上,用C语言实现命令行下输入密码回显星号和完全隐藏密码

本篇目录 引子在Windows 上实现在Linux上实现回显星号代码解读运行 完全隐藏运行 引子 在Windows系统上&#xff0c;当我们使用命令行和MySQL进行交互时&#xff0c;第一步就是要输入密码&#xff1a; -p后面的参数紧跟着的就是相应用户的密码。然而这种方式并不安全&#xff…

【数学建模】2019 年全国大学生数学建模竞赛C题全国一等奖获奖论文

2021 年高教社杯全国大学生数学建模竞赛题目 机场的出粗车问题 大多数乘客下飞机后要去市区&#xff08;或周边&#xff09;的目的地&#xff0c;出租车是主要的交通工具之一。国内多数机场都是将送客&#xff08;出发&#xff09;与接客&#xff08;到达&#xff09;通道分开…

2. windows系统下在QT中配置OPenCV开发环境

1. 说明: 在Windows系统中配置相对简单,不需要对下载的源码进行编译,在官网上下载的OPenCV可以直接使用,本文系统版本为win10,opencv是最新版本4.7.0。 效果展示: 2. 配置步骤: 2.1 下载OPenCV压缩包 打开opencv的官网OPenCV下载地址,可以在其页面内下载到最新的压…

iPhone手机UDID获取方法

UDID&#xff1a;iOS设备的唯一识别码&#xff0c;每台iOS设备都有一个独一无二的编码&#xff0c;这个编码&#xff0c;就称为识别码&#xff0c;也叫做UDID&#xff08;Unique Device Identifier&#xff09; 一、通过Xcode查看 手机连接电脑打开Xcode&#xff0c;选择wind…

入职2个月,那个高薪挖来的自动化软件测试被劝退了....

其实&#xff0c;在很多小伙伴的想法中&#xff0c;是希望通过跳槽实现薪酬涨幅&#xff0c;可是跳槽不是冲动后决定&#xff0c;应该谨慎啊~ 01 我的学弟&#xff0c;最近向我吐槽&#xff0c;2020 年上半年入职一家公司&#xff0c;当时是高薪挖走的他&#xff0c;所谓钱到…