每日coding

2645、构造有效字符串的最少插入数

给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。

如果字符串可以由 "abc" 串联多次得到,则认为该字符串 有效

示例 1:

复制代码
输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" 。

示例 2:

复制代码
输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。

示例 3:

复制代码
输入:word = "abc"
输出:0
解释:word 已经是有效字符串,不需要进行修改。 

提示:

  • 1 <= word.length <= 50
  • word 仅由字母 "a"、"b" 和 "c" 组成。

这道题目有点小技巧,主要是怎么说呢,他就三个字母,因此可以用一些规律来进行计算,也就是可以把abc记成012,因此可以得到如下规律,这里拿题解中的画图小匠来说,画图小匠yyds

复制代码
class Solution {
public:
    int addMinimum(string word) {
        char last = 'c';
        int addM = 0;
        for(const auto& cur : word){
            addM += (cur- last - 1 + 3) % 3;
            last = cur;
        }
        return addM + ('a' - last - 1 + 3) % 3;
    }
};

125、验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回false

示例 1:

复制代码
输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

示例 2:

复制代码
输入:s = "race a car"
输出:false
解释:"raceacar" 不是回文串。

示例 3:

复制代码
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 仅由可打印的 ASCII 字符组成

392、判断子序列

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

示例 1:

复制代码
输入:s = "abc", t = "ahbgdc"
输出:true

示例 2:

复制代码
输入:s = "axc", t = "ahbgdc"
输出:false

提示:

  • 0 <= s.length <= 100
  • 0 <= t.length <= 10^4
  • 两个字符串都只由小写字符组成。

做几道简单题目练练手

复制代码
class Solution {
public:
    bool isSubsequence(string s, string t) {
        int index1 = 0, index2 = 0;
        for(int i = 0;i < t.length();++i){
            if(s[index1] == t[index2]){
                index1++;
                index2++;
            } else{
                index2++;
            }
        }
        return index1 == s.length();
    }
};

228、汇总区间

给定一个 无重复元素有序 整数数组 nums

返回 恰好覆盖数组中所有数字最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

复制代码
输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

示例 2:

复制代码
输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"

提示:

  • 0 <= nums.length <= 20

  • -231 <= nums[i] <= 231 - 1

  • nums 中的所有值都 互不相同

  • nums 按升序排列

    class Solution {
    public:
    vector<string> summaryRanges(vector<int>& nums) {
    vector<string> ans;
    int i = 0;
    for (int j = 0; j < nums.size(); j++) {
    if (j + 1 == nums.size() || nums[j] + 1 != nums[j + 1]) {
    string str = "";
    str += to_string(nums[i]);
    if (i != j) {
    str += "->"; str += to_string(nums[j]);
    }
    ans.push_back(str);
    i = j + 1;
    }
    }
    return ans;
    }
    };


相关推荐
阿Y加油吧7 小时前
二刷 LeetCode:152. 乘积最大子数组 & 416. 分割等和子集 复盘笔记
笔记·算法·leetcode
smj2302_7968265216 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
_深海凉_20 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录21 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
superior tigre1 天前
78 子集
算法·leetcode·深度优先·回溯
superior tigre1 天前
739 每日温度
算法·leetcode·职场和发展
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 15. 三数之和 | C++ 排序+双指针
c++·算法·leetcode
北顾笙9801 天前
day37-数据结构力扣
数据结构·算法·leetcode
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 189. 轮转数组 | C++ 三次反转经典魔法 (O(1) 空间)
c++·算法·leetcode
m0_629494731 天前
LeetCode 热题 100-----13.最大子数组和
数据结构·算法·leetcode