1263. 是子序列嗎?

從物理學到計算機,再到硬件,再到人工智能!
藍橋杯備賽 (LintCode上刷的第十二題)

問題描述

給定字符串s和t,判斷s是否爲t的子序列。
你可以認爲在s和t中都只包含小寫字母。t可能是一個非常長(length ~= 500,000)的字符串,而s是一個較短的字符串(length <= 100)。
一個字符串的子序列是在原字符串中刪去一些字符(也可以不刪除)後,不改變剩餘字符的相對位置形成的新字符串(例如,"ace"是"abcde"的子序列而"aec"不是)。

樣例輸出

樣例1:
s = “abc”,t = “ahbgdc”
返回true。

樣例2:
s = “axc”,t = “ahbgdc”
返回false。

問題分析

沒有采用動態規劃的思想,直接遍歷一次原字符串t。遍歷到s的最後一個字符時,返回true;若遍歷到原字符串t的最後一個字符都沒能遍歷到s的最後一個字符串,返回false。

JAVA代碼實現

package DP;

public class isSubsequence1263_1113 {

	/**
	 * 判斷s是否爲t的子序列
	 * @param s 需要判斷的字符串
	 * @param t 原字符串
	 * @return
	 */
	public static boolean isSubsequence(String s, String t) {
		// 將字符串全部轉換成字符數組
		char[] sc = s.toCharArray();
		char[] tc = t.toCharArray();
		boolean flag = false;
		// 創建一個變量記錄sc數組的下標
		int m = 0;
		//遍歷原字符串tc的每一個元素
		for (int i = 0; i < tc.length; i++) {
			//當sc的元素與tc的元素相等時
			if (sc[m] == tc[i]) {
				//記錄sc數組下標的元素後移
				m ++;
			}
			//當m移動到sc的最後一個元素,跳出循環
			if (m == sc.length - 1) {
				flag = true;
				break;
			}
		}
		return flag;
	}

	public static void main(String[] args) {
		String s = "abc", t = "ahbgdc";
		boolean flag = isSubsequence(s, t);
		System.out.println(flag);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章