【问题描述】
给定两个字符串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】
Yespackage 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");


}

请问到底哪里错了

解决方案 »

  1.   

    即从t中删除一些字符,将剩余的字符连接起来,即可获得s。这个应该用一层循环就可以结束战斗。
    1、按照t进行逐个字遍历,同时从s的首字开始(s指针为0);
    2、如果t当前字跟s当前字一致,则s指针++;
    3、如果s指针已经到达末尾,则说明要求成立,退出。
    4、t指针++;
    5、如果t指针已经到达末尾,说明要求不成立,退出。
    6、继续循环到2.
      

  2.   

    刚学JAVA,能不能高速我错在哪了,说的通俗点,
      

  3.   

    改了一下,楼主试试: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");
    }
    }
    }
      

  4.   


     真的解决了,把nextLine()改成next()就好了,那s和t的长度不超过100000怎么解决,十分感谢
      

  5.   


    1楼的是正确的,这样代码量以及效率都会提高:
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String s = scanner.nextLine();
            String t = scanner.nextLine();
            int j = 0;
            for (int i = 0; i < t.length(); i++) {
                if (t.charAt(i) == s.charAt(j)) {
                    j++;  // 相等的话,指针右移一位
                    if (j >= s.length()) {
                        System.out.println("Yes");
                        return;
                    }
                }
            }
            System.out.println("NO");
        }