输入格式
输入的第一行包含 2626 个小写字母,为
a
到z
的牛文字母表顺序。下一行包含一个小写字母组成的字符串,为 Farmer John 听到 Bessie 唱的字母。
输出格式
输出 Bessie 所唱的完整的牛文字母歌的最小次数。
数据范围
字符串的长度不小于 11 且不大于 10001000。
输入样例:
abcdefghijklmnopqrstuvwxyz
mood
输出样例:
3
样例解释
在这个样例中,牛文字母表与日常的字母表的排列一致。
Bessie 至少唱了三遍牛文字母歌。
有可能 Bessie 只唱了三遍牛文字母歌,而 Farmer John 听到了以下被标记为大写的字母。
abcdefghijklMnOpqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
解题思路:
1.只要目的串中的第二个字符在原串中出现的位置,小于等于目的串前面的字符在原串中出现的位置,那么就表明牛又唱了一次,即将结果加一。例如 nmood 中,字符m应该在字符n之前,所以需要将结果加一。
2.还要将原串中的各字符位置存储,这里可以用数组模拟哈希表,即arr[i] = j;表示字符i在主串中的位置是j。
Java代码:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int []arr = new int[26];
for(int i = 0; i < 26; i++) {
arr[str.charAt(i) - 'a'] = i;
}
String des = br.readLine();
int ans = 1;
for(int i = 1; i < des.length(); i++) {
if(arr[des.charAt(i) - 'a'] <= arr[des.charAt(i - 1) - 'a'])
ans++;
}
System.out.println(ans);
}
}