2825. 循环增长使字符串子序列等于另一个字符串

Every day a Leetcode

题目来源:2825. 循环增长使字符串子序列等于另一个字符串

解法1:双指针

设置两个指针 i 和 j,分别指向字符串 str1 和 str2 的第一个字符。

双指针遍历 str1[i] 和 str2[j],如果 str1[i] 可以匹配 str2[j],那么 i 和 j 都加一,否则只有 i 加一。

匹配的含义是 str1[i] 等于 str2[j],或者 str1[i] 循环递增的下一个字符等于 str2[j]。

如果 j 等于 str2 的长度,则返回 true,否则返回 false。

代码:

/*
 * @lc app=leetcode.cn id=2825 lang=cpp
 *
 * [2825] 循环增长使字符串子序列等于另一个字符串
 */

// @lc code=start
class Solution
{
public:
    bool canMakeSubsequence(string str1, string str2)
    {
        // 特判
        if (str1.length() < str2.length())
            return false;
        if (str1 == str2)
            return true;

        int len1 = str1.length(), len2 = str2.length();
        int i = 0, j = 0;
        for (int i = 0; i < len1; i++)
        {
            if (match(str1[i], str2[j]))
                j++;
            if (j == len2)
                return true;
        }
        return false;
    }
    // 辅函数 - 判断字符 c1 和 c2 是否匹配
    bool match(char c1, char c2)
    {
        if (c1 == c2)
            return true;
        c1 = c1 == 'z' ? 'a' : char(c1 + 1);
        return c1 == c2;
        // return (c2 - c1 + 26) % 26 <= 1;
    }
};
// @lc code=end

结果:

2825. 循环增长使字符串子序列等于另一个字符串_第1张图片

复杂度分析:

时间复杂度:O(len1 + len2,其中 len1 是字符串 str1 的长度,len2 是字符串 str2 的长度。

空间复杂度:O(1)。

你可能感兴趣的:(Every,day,a,LeetCode,leetcode,数据结构与算法,C++,双指针)