码迷,mamicode.com
首页 > 其他好文 > 详细

5207. 尽可能使字符串相等

时间:2019-09-29 13:04:27      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:文字   sub   lse   i++   字母   转化   tor   max   int   

给你两个长度相同的字符串,s 和 t

将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。

用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。

如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。

如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0

 

示例 1:

输入:s = "abcd", t = "bcdf", cost = 3
输出:3
解释:s 中的 "abc" 可以变为 "bcd"。开销为 3,所以最大长度为 3。

示例 2:

输入:s = "abcd", t = "cdef", cost = 3
输出:1
解释:s 中的任一字符要想变成 t 中对应的字符,其开销都是 2。因此,最大长度为 1。

示例 3:

输入:s = "abcd", t = "acde", cost = 0
输出:1
解释:你无法作出任何改动,所以最大长度为 1。

提示:

1 <= s.length, t.length <= 10^5

0 <= maxCost <= 10^6

s 和 t 都只含小写英文字母。

 

一、自己写的错误示范,超时

 1 int equalSubstring(string s, string t, int maxCost) {
 2     int size = s.size();
 3     if (size == 0)
 4         return 0;
 5     vector<int> distance(size, 0);
 6     for (int i = 0; i < size; i++)
 7     {
 8         distance[i] = abs(s[i] - t[i]);
 9     }
10     for (auto e : distance)
11         cout << e << " ";
12     cout << endl;
13     int res = 0;
14     int tempres = 0;
15     int i = 0, j = 0;
16     int count = 0;
17     while (j < size)
18     {
19         count += distance[j];
20         if (count <= maxCost)
21         {
22             j++;
23             tempres++;
24             res = max(res, tempres);
25         }
26         else
27         {
28             count = 0;        
29             res = max(res, tempres);
30             tempres = 0;
31             i++;
32             j = i;
33         }
34     }
35     return res;
36 }

 

5207. 尽可能使字符串相等

标签:文字   sub   lse   i++   字母   转化   tor   max   int   

原文地址:https://www.cnblogs.com/zouma/p/11606877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!