Is Subsequence
Question
Soution
public boolean isSubsequence(String s, String t) {
if(s.length()==0) return true;
int j = 0;
for(int i=0;i<t.length();i++) {
if(t.charAt(i)==s.charAt(j)) j++;
if(j==s.length()) return true;
}
return false;
}Follow-up:
// tab
//t: a h b g a d c
// a 0 4 4 4 4 -1 -1 -1
// b 1 1 1 -1 -1 -1 -1 -1
// c 6 6 6 6 6 6 6 -1
// g 3 3 3 3 -1 -1 -1 -1
// h 1 1 -1 -1 -1 -1 -1 -1
public boolean isSubsequence(String s, String t) {
// preprocessing
// dp[i][j]: at current location j, next(include pos j) char i+'a' first appear at location dp[i][j]
// dp[i][j] = dp[i][j+1] except dp[t.charAt(j)-'a'][j] = j+1
int[][] dp = new int[26][t.length()+1];
for(int[] n:dp) Arrays.fill(n,-1);
for(int j=t.length()-1;j>=0;j--) {
for(int i=0;i<26;i++) {
dp[i][j] = dp[i][j+1];
}
dp[t.charAt(j)-'a'][j] = j+1;
}
int pos = 0;
for(char c:s.toCharArray()) {
int i = c-'a';
pos = dp[i][pos];
if(pos==-1) return false;
}
return true;
}Last updated