这道题实现的目的就像是word里的查找功能,上题:
第一次提交时,我用了自己写的对比两字符串的函数:
static boolean check(String s, String s1) {
int i = 0;
for(i = 0; i < s.length(); i ++) {
if(s.charAt(i) != s1.charAt(i) && s.charAt(i) != s1.charAt(i)-32 && s.charAt(i) != s1.charAt(i)+32)
return false;
}
if(s1.charAt(i) != ' ')return false;
return true;
}
但是MLE了....
MLE后我以为是String s2太大了所以超纲,最后想想不是的,一维数组可以开很大很大,并且题目也限定了“文章”字数范围,所以超纲原因只能是我的对比函数上出了问题;于是使用Java String类的方法过了;
AC撒花
但这道题留下了一个疑问:Java语言该怎么边读边处理英文文章呢?因为读到末尾并不能让机器直到已经到底了;
另外,这是用到的一些Java字符处理函数 ,复习一下:
1、str.charAt(i);
2、str.substring(i1,i2) //所截取的字符串包头不包尾
下面是我的AC代码:
package p1308;
import java.util.*;
public class Main {
public static void main(String[] args) {
//录入数据
Scanner in = new Scanner(System.in);
String s1 = in.nextLine().toLowerCase();
String s2 = in.nextLine().toLowerCase();
int count = 0;
int first = 0;
//处理数据
for(int i = 0; i <= s2.length()-s1.length(); i ++) {//从文章的第一个位置开始检查
if(i == 0 || s2.charAt(i-1)==' ')
if(s1.equals(s2.substring(i, i+s1.length())) && s2.charAt(i+s1.length()) == ' ') {//如果相同
if(count == 0)first = i;
count ++;
}
}
if(count != 0) {
System.out.print(count+" ");
System.out.print(first);
}else
System.out.print(-1);
}
}