39.复杂的字符串 - 图1

题目概述

题目详情(点我)

现在有两个字符串s1和s2(长度不超过200000),Tom是一个有强迫症的人,他想要把这两个字符串变的相同。

但是每次只能删除其中一个字符串的最左端的字符,问最少需要经过多少次操作才能使这两个字符串变的相同?

输入:
输入内容为两个,第一个为字符串s1,第二个为字符串s2

输出:
输出一个数字,表示最小的操作次数

题解

解题方法

  • 逆向遍历

算法知识

  • 排序

    • 时间复杂度: nlogn
    • 空间复杂度: n

解题思路

审题

  • String s1, s2 : 分别代表两个字符串
  • 一次只能删除最左边的一个字符

题目要求

  • 让两个字符串变成相同最少的操作次数

思路

  1. 题目要求将两个字符串删除到相同为止
  2. 每次只能删除最左边的字符
  • 依据这两个条件, 我们得到了另一个解法:
    从右侧开始遍历, 则变成了判断两个字符串中从末端开始最长的相同部分
    左侧剩的就都是不同的, 全部删除掉。

步骤

  1. 定义变量

    • int same : 计算两个字符串从右侧开始相同字符的个数, 初始值为0
  2. 从右侧开始遍历, 计算从右端开始相同字符的个数

    • 如果两个字符串的字符相同, 则same+1
    • 如果不同, 直接退出循环
  3. 返回两字符串字符个数之和 - 2 * same