392.判断子序列

  1. 392.判断子序列
    1. 392.1 题目
    2. 392.2 题解
      1. 双指针
    3. 392.3 代码
    4. 392.4 运行结果

392.判断子序列


392.1 题目

给定两个字符串 st,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"
输出:"y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • st 只包含小写字母

392.2 题解

双指针

// 方法一:双指针
// 初始化两个指针,循环遍历字符串 s 和 t,如果 s 和 t 当前位置的字符相等,移动 s 指针,不论是否相等,都移动 t 指针,判断s 指针到达了字符串 s 的末尾
static bool IsSubsequence1(string s, string t)
{
    // 初始化两个指针,分别指向字符串 s 和 t 的起始位置
    int sIndex = 0, tIndex = 0;

    // 循环遍历字符串 s 和 t
    while (sIndex < s.Length && tIndex < t.Length)
    {
        // 如果 s 和 t 当前位置的字符相等,移动 s 指针
        if (s[sIndex] == t[tIndex])
        {
            sIndex++;
        }

        // 不论是否相等,都移动 t 指针
        tIndex++;
    }

    // 如果 s 指针到达了字符串 s 的末尾,说明 s 是 t 的子序列,返回 true;否则,返回 false
    return sIndex == s.Length;
}

392.3 代码

using System;

class Program
{
    static void Main()
    {
        #region 题目

        // 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
        // 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。
        // 进阶:
        // 如果有大量输入的 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
        // 两个字符串都只由小写字符组成。

        #endregion

        #region 测试

        // 示例 1
        string s1 = "abc";
        string t1 = "ahbgdc";
        bool result1_1 = IsSubsequence1(s1, t1);
        Console.WriteLine($"示例1 方法1 输出:{result1_1}");

        // 示例 2
        string s2 = "axc";
        string t2 = "ahbgdc";
        bool result2_1 = IsSubsequence1(s2, t2);
        Console.WriteLine($"示例2 方法1 输出:{result2_1}");

        #endregion
    }

    #region 答案

    // 方法一:双指针
    // 初始化两个指针,循环遍历字符串 s 和 t,如果 s 和 t 当前位置的字符相等,移动 s 指针,不论是否相等,都移动 t 指针,判断s 指针到达了字符串 s 的末尾
    static bool IsSubsequence1(string s, string t)
    {
        // 初始化两个指针,分别指向字符串 s 和 t 的起始位置
        int sIndex = 0, tIndex = 0;

        // 循环遍历字符串 s 和 t
        while (sIndex < s.Length && tIndex < t.Length)
        {
            // 如果 s 和 t 当前位置的字符相等,移动 s 指针
            if (s[sIndex] == t[tIndex])
            {
                sIndex++;
            }

            // 不论是否相等,都移动 t 指针
            tIndex++;
        }

        // 如果 s 指针到达了字符串 s 的末尾,说明 s 是 t 的子序列,返回 true;否则,返回 false
        return sIndex == s.Length;
    }

    #endregion
}

392.4 运行结果

示例1 方法1 输出:True
示例2 方法1 输出:False


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏