最左侧冗余覆盖子串
题目
给定2个字符串s1和s2和正整数k,其中s1长度为n1, s2长度为n2,在s2中选一 个子串,满足:
- 该子串长度为n1+k
- 该子串包含s1中全部字母
- 该子串每个字母的出现次数不小于s1中对应的宇母
我们称s2以长度K冗余覆盖s1。给定s1、s2和k,求最左侧的s2以长度k冗余覆盖s1的子串的首个元素的下标,如果没有返 回-1
举例:
s1=ab
s2=aabcd
k=1
则子串aab和abc均满足此条件,由于aab在abc的左侧,aab的第一个元素下标为0,因此输出0
输入描述
输入三行,第一行为s1,第二行为s2,第三行为k
s1和s2只包含小写字母
输出描述
最左侧的s2以长度k冗余覆盖s1的子串首个元素的下标,如果没有返回-1
代码实现(Java)
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String s1 = in.nextLine();
String s2 = in.nextLine();
int k = Integer.parseInt(in.nextLine());
int result = -1;
int s2Len = s2.length();
int s1Len = s1.length();
if (s2Len >= s1Len + k) {
int i = s2.indexOf(s1);
if (i == -1) {
result = i;
} else {
if (i < k+s1Len-1) {
result = 0;
} else {
result = i -k;
}
}
}
System.out.println(result);
}
}