題目描述:java
輸入共兩行,第一行爲字典,以空格爲界限,爲一個個字符串spa
第二行爲用戶輸入,一樣以空格爲界限的一個個字符串。code
要求:找出輸入的字符串是否在字典裏,若不在,輸出該字符串,並考慮是否能經過增長一個或者減小一個或者修改一個字符串來自動補全,輸出修正後的字符串。blog
解題思路:字符串
很容易想到求最長公共子串,考慮最長公共子串的長度和字典以及輸入的關係。it
代碼:class
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String dicts[] = scanner.nextLine().split(" "); String words[] = scanner.nextLine().split(" "); for (String word : words) { boolean found = false; for (int i = 0; i < dicts.length; i++) { int lend = (dicts[i]).length(); int lenw = word.length(); if (lend != lenw) { break; } int lcs = lcs(dicts[i], word); if (lcs == word.length()) { found = true; break; } } if (found == false) { System.out.print(word + " "); for (int i = 0; i < dicts.length; i++) { int lcs = lcs(dicts[i], word); boolean flag = false; if (word.length() <= dicts[i].length()) { flag = (dicts[i].length() - lcs) == 1; } else if (word.length() > dicts[i].length()) { flag = (word.length() - lcs) == 1; } if (flag == true) { System.out.print(dicts[i] + " "); } } System.out.println(); } } } } public static int lcs(String dict, String word) { int lend = dict.length(); int lenw = word.length(); int[][] value = new int[lend + 1][lenw + 1]; for (int i = 0; i < lend; i++) value[i][0] = 0; for (int i = 0; i < lenw; i++) value[0][i] = 0; for (int i = 1; i <= lend; i++) { for (int j = 1; j <= lenw; j++) { if (dict.charAt(i - 1) == word.charAt(j - 1)) { value[i][j] = value[i - 1][j - 1] + 1; } else { if (value[i - 1][j] > value[i][j - 1]) value[i][j] = value[i - 1][j]; else { value[i][j] = value[i][j - 1]; } } } } return value[lend][lenw]; } }