The Subsequence Algorithm for Two Strings – How to Check i
- 时间:2020-09-21 09:15:21
- 分类:网络文摘
- 阅读:100 次
Given a string s and a string t, check if s is subsequence of t.
You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, “ace” is a subsequence of “abcde” while “aec” is not).
Example 1:
s = “abc”, t = “ahbgdc”Return true.
Example 2:
s = “axc”, t = “ahbgdc”Return false.
Follow up: If there are lots of incoming S, say S1, S2, … , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code?
The Two Pointer String Subsequence Algorithm
If source string s is larger than source string t, s must not be a subsequence of t. Otherwise, we can have two pointers i and j, pointing initialially to the begining of the two strings s and t respectively. If at any time, s[i] == t[j], we move both pointers to next position, otherwise, we need to increment j, until either of the pointer is beyond the end of the source string.
If ever i reaches the end, it indicates that source string s is a subsequence of string b. The time complexity of the two pointer algorithm regarding this problem is O(Max(N, M)) where N and M are the sizes of the string s and t respectively.
The algorithm uses a constant O(1) space.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public: bool isSubsequence(string s, string t) { if (s.size() > t.size()) return false; int i = 0, j = 0; int n1 = s.size(), n2 = t.size(); while ((i < n1) && (j < n2)) { if (s[i] == t[j]) { i ++; j ++; } else { j ++; } } return i == n1; } }; |
class Solution {
public:
bool isSubsequence(string s, string t) {
if (s.size() > t.size()) return false;
int i = 0, j = 0;
int n1 = s.size(), n2 = t.size();
while ((i < n1) && (j < n2)) {
if (s[i] == t[j]) {
i ++;
j ++;
} else {
j ++;
}
}
return i == n1;
}
};–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:The Common Kodi Errors and Use of Free VPN for Linux Java Pattern: Use Atomic Boolean to Return Single Usage Object Significance of HTML and CSS in Mobile App Development How to Reverse Words in a String using Modern Programming Langua The Python Function to Retrieve the Producer Reward for Witness Function to Compute the Average Salary Excluding the Minimum and Efficient Algorithms to Compute The kth Factor of a Natural Numb Can We Make Arithmetic Progression From Sequence of Numbers? How to SSH to Remote Host using the Priviate/Public Keys Authent How do you Test Getter and Setter Interface in Java using Mockit
- 评论列表
-
- 添加评论