1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List;
public class IsSubsequence {
public boolean isSubsequence(String s, String t) { int i=0; int j=0;
while(i<s.length() && j<t.length()){ if (s.charAt(i) == t.charAt(j)){ i++; j++; } else{ j++; } } if (i==s.length()) return true; else return false; }
public boolean isSubsequence2(String s, String t) { int index = -1; for (char c : s.toCharArray()) { index = t.indexOf(c, index + 1); if (index == -1) return false; } return true; }
public boolean isSubsequence3(String s, String t){ List<Integer>[] l = new List[28]; for (int i=0; i<t.length(); i++){ if (l[t.charAt(i)-'a'] == null) l[t.charAt(i)-'a'] = new ArrayList<>(); l[t.charAt(i)-'a'].add(i); }
int min = -1; for (int i = 0; i < s.length(); i++) { if (l[s.charAt(i)] == null) return false; int j = Collections.binarySearch(l[s.charAt(i)], min); if (j < 0) j = -j - 1; if (j == l[s.charAt(i)].size()) return false; min = l[s.charAt(i)].get(j) + 1; } return true;
} }
|