【牛客网 - 华为机试】HJ81 字符串字符匹配
题目描述
判断短字符串中的所有字符是否在长字符串中全部出现。
请注意本题有多组样例输入。
输入描述:
输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。
输出描述:
如果短字符串的所有字符均在长字符串中出现过,则输出true。否则输出false。
示例1
输入
bc
abc
输出
true
解题思路
我的笨办法
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String s1 = sc.nextLine();
String s2 = sc.nextLine();
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
HashSet<Character> set = new HashSet<>();
for (int i = 0; i < c2.length; i++) {
set.add(c2[i]);
}
System.out.println(Arrays.toString(set.toArray()));
int count = 0;
for (char c : c1) {
if (set.add(c)) {
System.out.println(false);
break;
}
count++;
}
if (count == c1.length)
System.out.println(true);
}
}
优秀的解法
可以直接将短的字符串中的字符进行遍历,然后利用String的valueOf()方法判定是否存在在长字符中,则不需要浪费那么多的额外空间
并且不需要两个字符都遍历,而只需要遍历长字符串即可
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
String str2 = "";
while( (str = br.readLine()) != null && !"".equals(str)){
str2 = br.readLine();
char[] arr = str.toCharArray();
boolean judge = true;
for (char c : arr) {
if (!str2.contains(String.valueOf(c))){
judge = false;
break;
}
}
System.out.println(judge);
}
br.close();
}