题解 | #判断是不是子字符串#Java语言#
判断是不是子字符串
http://www.nowcoder.com/questionTerminal/5382ff24fbf34a858b15f93e2bd85307
题目分析:
* 给定两个字符串 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);
}
}
}


