华为OD机试真题 - 快速人名查找
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] namea = sc.nextLine().split(",");
String abbr = sc.nextLine();
System.out.println(getNames(namea, abbr));
}
public static List getNames(String[] nameall, String word) {
List<String> ans = new ArrayList<>();
for (int i = 0; i < nameall.length; i++) {
if (isSaftty(nameall[i], word))
ans.add(nameall[i]);
}
return ans;
}
public static boolean isSaftty(String name, String word) {
String[] names = name.split( " ");
int index = 0, right = 0, i = 1;
while (right + i < word.length()) {
if (dfs(names, word, index, right, right + i))
return true;
i++;
}
return false;
}
public static boolean dfs(String[] names, String word, int index,int left,int right) {
if (index > names.length - 1 && left > word.length())
return true;
if (index > names.length - 1 || right > word.length())
return false;
String s = word.substring(left, right);
if (names[index].startsWith(s)) {
if (index == names.length - 1 && right == word.length())
return true;
int i = 1;
while (right + i <= word.length()) {
if (dfs(names, word, index + 1, right, right + i))
return true;
i++;
}
return false;
} else
return false;
}
Scanner sc = new Scanner(System.in);
String[] namea = sc.nextLine().split(",");
String abbr = sc.nextLine();
System.out.println(getNames(namea, abbr));
}
public static List getNames(String[] nameall, String word) {
List<String> ans = new ArrayList<>();
for (int i = 0; i < nameall.length; i++) {
if (isSaftty(nameall[i], word))
ans.add(nameall[i]);
}
return ans;
}
public static boolean isSaftty(String name, String word) {
String[] names = name.split( " ");
int index = 0, right = 0, i = 1;
while (right + i < word.length()) {
if (dfs(names, word, index, right, right + i))
return true;
i++;
}
return false;
}
public static boolean dfs(String[] names, String word, int index,int left,int right) {
if (index > names.length - 1 && left > word.length())
return true;
if (index > names.length - 1 || right > word.length())
return false;
String s = word.substring(left, right);
if (names[index].startsWith(s)) {
if (index == names.length - 1 && right == word.length())
return true;
int i = 1;
while (right + i <= word.length()) {
if (dfs(names, word, index + 1, right, right + i))
return true;
i++;
}
return false;
} else
return false;
}
全部评论
相关推荐
不管什么都不想跳动了:本人美团百度快手都待过,建议肯定是直接留快手多一点产出后转正or直接冲字节腾讯暑期吧。一是快手从福利到基建都吊打另外两家。美团现在这个业务比较惨,本来毛利就很低,亏损严重,今年很可能要优化人力降低成本,去了别说日常,就算暑期后面都很可能被优化。百度其实实习生权限挺高的,可以接触到一些含金量高的项目,但是现在的风评不如之前了,薪资也不高。二是转正概率和薪资是跟产出挂钩的,你都在手子已经积累产出了,去其他家日常实习产出都是从0开始,肯定不可能有你在手子转正可能性大啊,现在日常压根没必要去,而且我有两个师弟都是在快手日常转正的,不用太担心,安心留在手子一边多做一点产出然后一边冲字节腾讯暑期,字节腾讯今年实习岗位非常多的,不如好好把握这个,加油。
点赞 评论 收藏
分享
点赞 评论 收藏
分享