每日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;
    }
    };


相关推荐
XiaoLeisj1 小时前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Lenyiin2 小时前
01.02、判定是否互为字符重排
算法·leetcode
tinker在coding6 小时前
Coding Caprice - Linked-List 1
算法·leetcode
南宫生11 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
Lenyiin12 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
涵涵子RUSH19 小时前
合并K个升序链表(最优解)
算法·leetcode
清炒孔心菜19 小时前
每日一题 338. 比特位计数
leetcode
sjsjs1120 小时前
【多维DP】力扣3122. 使矩阵满足条件的最少操作次数
算法·leetcode·矩阵
Sudo_Wang20 小时前
力扣150题
算法·leetcode·职场和发展
呆呆的猫1 天前
【LeetCode】9、回文数
算法·leetcode·职场和发展