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


相关推荐
星沁城32 分钟前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
一直学习永不止步1 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数
劲夫学编程4 小时前
leetcode:杨辉三角
算法·leetcode·职场和发展
师太,答应老衲吧8 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
passer__jw76716 小时前
【LeetCode】【算法】208. 实现 Trie (前缀树)
算法·leetcode
益达爱喝芬达17 小时前
力扣11.3
算法·leetcode
passer__jw76717 小时前
【LeetCode】【算法】406. 根据身高重建队列
算法·leetcode
__AtYou__17 小时前
Golang | Leetcode Golang题解之第535题TinyURL的加密与解密
leetcode·golang·题解
远望樱花兔17 小时前
【d63】【Java】【力扣】141.训练计划III
java·开发语言·leetcode
迃-幵17 小时前
力扣:225 用队列实现栈
android·javascript·leetcode