392. Is Subsequence
Easy
Given a string s and a string t, check if s is subsequence of t.
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).
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?
Credits:
Special thanks to @pbrother for adding this problem and creating all test cases.
Example 1:
Input: s = "abc", t = "ahbgdc" Output: true
Example 2:
Input: s = "axc", t = "ahbgdc" Output: false
Constraints:
0 <= s.length <= 100
0 <= t.length <= 10^4
- Both strings consists only of lowercase characters.
class Solution { public boolean isSubsequence(String s, String t) { int i = 0, j = 0; while(j<t.length()){ if(i<s.length() && s.charAt(i)==t.charAt(j)){ i++; } j++; } return i==s.length(); } } //Followup class Solution { public boolean isSubsequence(String s, String t) { int ns = s.length(), nt = t.length(); List<Integer>[] index = new List[256]; for(int i=0; i<nt; ++i){ char c = t.charAt(i); if(index[c] == null) index[c] = new ArrayList<Integer>(); index[c].add(i); } int next = 0; for(int i=0; i<ns; ++i){ char c = s.charAt(i); //index[c] should contain an index >= next if(index[c] == null) return false; //https://www.geeksforgeeks.org/collections-binarysearch-java-examples/ int p = Collections.binarySearch(index[c], next); if(p<0) p = -p-1; if(p==index[c].size()) return false; next = index[c].get(p) + 1; } return true; } }
No comments:
Post a Comment