題目標題:
判斷短字符串中的全部字符是否在長字符串中所有出現java
輸入兩個字符串。第一個爲短字符,第二個爲長字符。
返回值:true或者false
bc abc
true
import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; import java.util.Set; /** * All Rights Reserved !!! */ public class Main { public static void main(String[] args) { // Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt")); while (scanner.hasNext()) { String sub = scanner.next(); String s = scanner.next(); System.out.println(contains(s, sub)); } scanner.close(); } private static boolean contains(String s, String sub) { Set<Character> set = new HashSet<>(); for (int i = 0; i < s.length(); i++) { set.add(s.charAt(i)); } for (int i = 0; i < sub.length(); i++) { if (!set.contains(sub.charAt(i))) { return false; } } return true; } }
/** * All Rights Reserved !!! */ public class KMP { // 下面的KMP匹配算法 private static boolean kmpMatch( String s, String sub) { int[] next = getNext(sub); // 母串的長度 int m = s.length(); // 子串的長度 int n = sub.length(); int j = 0; int i = -1; for(; j < m; j++) { while (sub.charAt(i + 1) != s.charAt(j) && i >= 0) { i = next[i]; } if (sub.charAt(i + 1) == s.charAt(j)) { i++; } if (i == n - 1) { return true; } } return false; } private static int[] getNext(String s) { // next[j] 表示當 W[j] 與 S[i] 不匹配時,W 應該滑到哪一個位置上。 int[] next = new int[s.length()]; next[0] = -1; next[1] = 0; // j在前 int i = 0; int j = -1; while (i < s.length() - 1) { if (j == -1 || s.charAt(i) == s.charAt(j)) { if (s.charAt(++i) != s.charAt(++j)) { next[i] = j; } else { // 回退 next[i] = next[j]; } } else { // 回退 j = next[j]; } } return next; } }