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