敏感詞(百度2017秋招真題)
阿新 • • 發佈:2019-01-13
題目描述
大部分論壇、網站等,為了方便管理,都進行了關於敏感詞的設定。
在多數網站,敏感詞一般是指帶有敏感政治傾向、暴力傾向、不健康色彩的詞或不文明語,也有一些網站根據自身實際情況,設定一些只適用於本網站的特殊敏感詞。比如,當你發貼的時候帶有某些事先設定的詞時,這個貼是不能發出的。或者這個詞被自動替換為星號 (*),或者說是被和諧掉了。請注意敏感詞只有小寫字母,文字如果中的大寫字母當做小寫字母處理,出現敏感單詞,即使作為子串出現也要被和諧,多個子串重疊他們都要被和諧。
例如當敏感詞是gre,eat 是
Your English is Great.
將被和諧成
Your English is *
請程式設計,輸入給定的文字和關鍵字,將所有被和諧的部分都打上星號 (*)
輸入
輸入的第一行包含一個整數 n,表示敏感詞的總數。
接下來的 n 行,每行包含一個長度不超過 100 的敏感詞,單詞不區分大小寫。
接下來的一行包含一段長度不超過 10000的字串表示待處理的文字。
輸出
輸出一行,表示和諧過後的文字。
樣例輸入
4
revolution
greatwall
democracy
science
Cross the greatwall, we can reach every corner of the world.
樣例輸出
Cross the *** , we can reach every corner of the world.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
int n;
String[] senWord = new String[105];
boolean[] flag = new boolean[10050];
String text;
String result = "";
while (in.hasNext()) {
n = in.nextInt();
for (int i = 0; i < n; i++) {
senWord[i] = in.next().toLowerCase();
}
in.nextLine();
text = in.nextLine();
int begin = -1;
String temp = text.toLowerCase();
for (int i = 0; i < n; i++) {
while ((begin = temp.indexOf(senWord[i], begin + 1)) > -1) {
for (int j = begin; j < begin + senWord[i].length(); j++) {
flag[j] = true;
}
}
}
for (int i = 0; i < text.length(); i++) {
if(flag[i]){
result += '*';
}else{
result += text.charAt(i);
}
}
out.println(result);
}
out.flush();
}
}