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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43269495/article/details/84093579