392. Is Subsequence (子序列判斷)
Given a string s and a string t, check if s is subsequence of t.
You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace"
"abcde"
while "aec"
is
not).
Example 1:
s = "abc"
, t = "ahbgdc"
Return true
.
Example 2:
s = "axc"
, t = "ahbgdc"
Return false
.
Follow up:
If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code?
題目大意:判斷 字串s 是否由 字串t中的某些字元 ,按照原始的相對順序構成的。
解題思路:同時遍歷s和t,如果字元不相同,則右移t中的遍歷下標;如果字元相同,則同時右移s和t中的遍歷下標。如果t遍歷完,而s還沒遍歷完,則返回false,否則返回true。程式碼如下:(11ms,beats 83.94%)
public class Solution { public boolean isSubsequence(String s, String t) { char[] ss = s.toCharArray(), tt = t.toCharArray(); int i, j = 0; for (i = 0; i < ss.length; i++) { while (j < tt.length && tt[j] != ss[i]) j++; if (j == tt.length) return false; j++; } return true; } }