百練 1936: 全在其中 之 C 解答

http://bailian.openjudge.cn/practice/1936/java

描述測試

你設計了一個新的加密技術,能夠用一種聰明的方式在一個字符串的字符間插入隨機的字符串從而對信息進行編碼。因爲專利問題,咱們將不會詳細討論如何在原有信息中產生和插入字符串。不過,爲了驗證你的方法,有必要寫一個程序來驗證原來的信息是否全在最後的字符串之中。編碼

給定兩個字符串s和t,你須要判斷s是不是t的「子列」。也就是說,若是你去掉t中的某些字符,剩下字符將鏈接而成爲s。加密

 

輸入設計

輸入包括多個測試樣例。每個都是由空格分隔的由字母數字ASCII字符組成的兩個特定的字符串s和t。s和t的長度不超過100000。code

輸出ip

對於每一個測試樣例,若是s是t的「子列」,則輸出」Yes」,不然輸出」No」ci

樣例輸入字符串

sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

樣例輸出string

Yes
No
Yes
No

來源

Ulm Local 2002

#include<stdio.h>
#include<string.h>
#define M 100000
int main()
{
	char ch1[M+1],ch2[M+1];
	while(scanf("%s %s",ch1,ch2) == 2)
	{
		int len1,len2,i,j,k;
		len1=strlen(ch1);
		len2=strlen(ch2);
		k=j=0;
		for(i=0;i<len1;++i)
		{
			if(j==len2)
				break;
			for(;j<len2;j++) //j一直加,從而使順序不變 
			{
				if(ch1[i]==ch2[j])
				{
					k++;
					j++;
					break;
				}
			}
		}
		if(k==len1)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}

如下Java解答報 Runtime Error, 具體緣由不明.

import java.util.Scanner;

public class OpenJudge1936 {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		String line = "";
		while (!(line = cin.nextLine()).equals("")) {
			String plain = line.split(" ")[0];
			String cipher = line.split(" ")[1];
			boolean contained = true;
			int j = 0;
			for (int i = 0; i < plain.length(); i++) {
				boolean found = false;
				// Note that only start from 0 for the first character in plain
				for (; j < cipher.length(); j++) {
					if (plain.charAt(i) == cipher.charAt(j)) {
						found = true;
						j++;
						break;
					}
				}
				if (!found) {
					contained = false;
					break;
				}
			}
			if (contained) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		}
		cin.close();
	}

}
相關文章
相關標籤/搜索