@yexiaoqi
2022-06-04T03:36:18.000000Z
字数 738
阅读 1446
刷题 华为机试
题目:给你两个字符串 t 和 p,要求从 t 中找到一个和 p 相同的连续子串,并输出该子串第一个字符的下标
输入描述:输入文件包括两行,分别表示字符串 t 和 p,保证 t 的长度不小于 p,且 t 的长度不超过1000000,p 的长度不超过10000
输出描述:如果能从 t 中找到一个和 p 相等的连续子串,则输出该子串第一个字符在 t 中的下标,下标从左到右依次为1,2,3,...;如果不能则输出 "No",如果含有多个这样的子串,则输出第一个字符下标最小的
示例一
输入:AVERDXIVYERDIAN
RDXI
输出:4
public class Main {//方法一:直接用indexOf/*public static void main(String[] args) {Scanner sc = new Scanner(System.in);String t = sc.next();String p = sc.next();String res = "No";int index = t.indexOf(p);if(index>0) res=index+1+"";System.out.println(res);}*///方法二:双指针public static void main(String[] args) {Scanner sc = new Scanner(System.in);String t = sc.next();String p = sc.next();int a=1, b=1;while (a<t.length() && b<p.length()) {if (t.charAt(a-1) == p.charAt(b-1)){b++;} else {b = 1;}a++;}System.out.println(b==p.length() ? a-b+1 : "No");}}
