题目分析:

 * 给定两个字符串 s和 t ,判断 s是否为 t 的子序列。
 * 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度n ~= 500,000),而 s 是个短字符串(长度 <=100)。
 *
 * 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
 * 意思就是子序列t的所有字符在s中都会按顺序出现
  *
 * 进阶:时间复杂度O(n) ,空间复杂度O(n) 

思路:

    1.只需要按顺序遍历字符串t中的字符,每遍历一个字符,判断字符在s中的出现位置,如果没有则直接返回fals
    2.利用String.indexOf(int ch, int fromIndex)方法,只需要维护一个局部变量 fromIndex

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String t = sc.nextLine();
            String s = sc.nextLine();
            int fromIndex = 0;
            boolean flag = true;
            for (int i = 0; i < t.length(); i++) {
                int tmp = s.indexOf(t.charAt(i), fromIndex);
                if (tmp < 0) {
                    flag = false;
                    break;
                }
                fromIndex = tmp;
                // s = s.substring(tmp);
            }
            System.out.println(flag);
        }
    }

}