给定一组个字符串,为每个字符串找出能够唯一识别该字符串的最小前缀。
输入描述:
第一行输入一个整数 n 表示字符串个数 后面n行,每行一个字符串,一共n串互不相同的字符串。(2 <= n <=
100,字符串长度不超过100)
输出描述:
输出n行,每行一个字符串,依次是每个字符串的最小可唯一识别前缀
链接:https://www.nowcoder.com/questionTerminal/ebcf8391390543bfbdd018af60d0c218?answerType=1&f=discussion
来源:牛客网
示例1
输入
5
meituanapp
meituanwaimai
dianpingliren
dianpingjiehun
mt
输出
meituana
meituanw
dianpingl
dianpingj
mt
备注:
如果一个字符串S是另一个字符串T的前缀,则S的最小可识别前缀为S;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
String[] strings = new String[N];
for (int i = 0; i < N; i++)
strings[i] = scanner.next();
scanner.close();
for (String s : strings)
System.out.println(unique(s, strings));
}
//返回字符串s在字符串数组strings中最短唯一前缀
private static String unique(String s, String[] strings) {
String prefix = s.substring(0, 1);//前缀初始为首字符
for (String single : strings) {
if (single.equals(s))//跳过字符串s本身
continue;
while (single.indexOf(prefix) == 0 && prefix.length() < s.length()) //字符串single与字符串s具有相同的前缀prefix,前缀需要往后延长
prefix = s.substring(0, prefix.length()+1);
}
return prefix;
}
}