LeetCode--392.判断子序列(C++描述)

// Source : https://leetcode-cn.com/problems/is-subsequence/
// Date : 2021-11-11

/**************************************************************************************
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

致谢:

特别感谢 @pbrother 添加此问题并且创建所有测试用例。

示例 1:

输入:s = “abc”, t = “ahbgdc”
输出:true
示例 2:

输入:s = “axc”, t = “ahbgdc”
输出:false

提示:

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

/*******************************************************************************************************
题目分析: 注释掉的是小编最初的想法,从s的第一个字符开始在t中查找字符的Index,并将index加入到index数组中,最后判断Index数组是否有序,若有序则说明满足题意,反之返回false即可。
然,查看了官方解法以后发现官方解法更直接简单,直接判断两个对应位置的字符是否相等,如果不相等,就把t的index向后移动看能否找到,如果找到,就将s中的index向后移动,最后如果s的元素不全被找到,则说明不符合要求,注意的是,利用本方法,就巧妙地避免了在t中找到上一个元素之前位置地元素。
********************************************************************************************************/

class Solution {
    
    
public:
    bool isSubsequence(string s, string t) {
    
    
        int n = s.length(), m = t.length();
        int i = 0, j = 0;
        while (i < n && j < m) {
    
    
            if (s[i] == t[j]) {
    
    
                i++;
            }
            j++;
        }
        return i == n;
    }
};
// class Solution {
    
    
// public:
//     bool isSubsequence(string s, string t) {
    
    
//         //将s中在t中的元素下标放入该数组
//         vector<int> index;
//         vector<int> sort_index;
//         // int _index = 0;
//         for(int i = 0;i < s.size();++i)
//         {
    
    
//             int _index = t.find(s[i]);
//             //如果找不到元素,直接返回错误
//             if(_index > t.size())
//                 return false;
//             else
//             {
    
    
//                 //t中对应的元素改为0
//                 t[_index] = '0';
//                 index.push_back(_index);
//                 i = _index;
//             }
//         }
//         //对index数组排序,如果排序前后二者相同则说明有序
//         for(int i = 0;i < index.size();++i)
//         {
    
    
//             sort_index.push_back(index[i]);
//         }
//         // sort_index = index;
//         //对index数组排序,如果排序前后二者相同则说明有序
//         sort(index.begin(), index.end());
//         if(sort_index == index)
//             return true;
//         else
//             return false;
//     }
// };

猜你喜欢

转载自blog.csdn.net/qq_44614524/article/details/121264246