题目分析:
* 给定两个字符串 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); } } }