【问题描述】
给定两个字符串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");
}
请问到底哪里错了
给定两个字符串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的首字开始(s指针为0);
2、如果t当前字跟s当前字一致,则s指针++;
3、如果s指针已经到达末尾,则说明要求成立,退出。
4、t指针++;
5、如果t指针已经到达末尾,说明要求不成立,退出。
6、继续循环到2.
{
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");
}
}
}
真的解决了,把nextLine()改成next()就好了,那s和t的长度不超过100000怎么解决,十分感谢
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");
}