【问题描述】
给定两个字符串s和t,请判断s是否是t的子序列。即从t中删除一些字符,将剩余的字符连接起来,即可获得s。
【输入形式】
包括若干个测试数据。每个测试数据由两个ASCII码的数字和字母串s和t组成,s和t的长度不超过100000。
【输出形式】
对每个测试数据,如果s是t的子序列则输出“Yes”,否则输出“No”。
【样例输入1】
sequence subsequence
【样例输出1】
Yes
【样例输入2】
person compression
【样例输出2】
No
【样例输入3】
VERDI vivaVittorioEmanueleReDiItalia
【样例输出3】
Yes
package java5.exam;
import java.util.Scanner;
public class Abc {
public static void main(String[]args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String t = scanner.nextLine();
int i;
int j;
int w=0;
for(i=0;i<=s.length()-1;i++){
for(j=0;j<=t.length()-1;j++){
if(s.charAt(i)==t.charAt(j)){
w++;
j++;
}
}
if(j>=t.length()){
break;
}
if(w==s.length()){
System.out.println("Yes");
}else
System.out.println("No");
}
请问到底哪里错了
即从t中删除一些字符,将剩余的字符连接起来,即可获得s。
这个应该用一层循环就可以结束战斗。
1、按照t进行逐个字遍历,同时从s的首字开始(s指针为0);
2、如果t当前字跟s当前字一致,则s指针++;
3、如果s指针已经到达末尾,则说明要求成立,退出。
4、t指针++;
5、如果t指针已经到达末尾,说明要求不成立,退出。
6、继续循环到2.
改了一下,试试:
Java code123456789101112131415161718192021222324252627282930313233343536373839 import java.util.Scanner; public class Abc { public static void main(String[]args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); String t; do { t = scanner.nextLine(); }while(t.length()<s.length()); //t 的长度要大于等于s的长度。 int i; int j; int w=0; for(i=0;i<=s.length()-1;i++) { for(j=w;j<=t.length()-1;j++) //从w 开始匹配。(不要再从头去匹配了)。 { if(s.charAt(i)==t.charAt(j)) { w++; //找到匹配的,w递增1。 内层循环中断,判断下一个。 break; } } } if(w==s.length()) //循环结束,判断w的长度。 { System.out.println("Yes"); } else { System.out.println("No"); } } }