题目描述
小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下:
在一个密码本中,每一页都有一个由26个小写字母组成的若干位密码,每一页的密码不同,需要从这个密码本中寻找这样一个最长的密码,
从它的末尾开始依次去掉一位得到的新密码也在密码本中存在。
请输出符合要求的密码,如果有多个符合要求的密码,则返回字典序最大的密码。
若没有符合要求的密码,则返回空字符串。
输入描述
密码本由一个字符串数组组成,不同元素之间使用空格隔开,每一个元素代表密码本每一页的密码。
输出描述
一个字符串
用例
输入 | h he hel hell hello |
输出 | hello |
说明 | 无 |
输入 | b ereddred bw bww bwwl bwwlm bwwln |
输出 | bwwln |
说明 | 无 |
题目解析
本题和
含义相同,解法类似。
根据考友反馈,本题支持单字符为符合要求的密码。
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
const arr = line.split(" ");
console.log(getResult(arr));
});
function getResult(arr) {
arr.sort((a, b) =>
a.length != b.length ? a.length - b.length : a == b ? 0 : a > b ? 1 : -1
);
const set = new Set(arr);
let ans = "";
while (arr.length) {
const str = arr.pop();
let end = str.length - 1;
if (end === 0 && ans === "") {
ans = str;
continue;
}
while (set.has(str.substring(0, end))) {
if (end === 1) {
return str;
} else {
end--;
}
}
}
return ans;
}
优化逻辑
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
const arr = line.split(" ");
console.log(getResult(arr));
});
function getResult(arr) {
arr.sort((a, b) =>
a.length != b.length ? a.length - b.length : a == b ? 0 : a > b ? 1 : -1
);
const set = new Set(arr);
while (arr.length) {
const str = arr.pop();
let end = str.length - 1;
if (end === 0) {
return str;
}
while (set.has(str.substring(0, end))) {
if (end === 1) {
return str;
} else {
end--;
}
}
}
return "";
}
Java算法源码
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = sc.nextLine().split(" ");
System.out.println(getResult(arr));
}
public static String getResult(String[] arr) {
Arrays.sort(arr, (a, b) -> a.length() != b.length() ? a.length() - b.length() : a.compareTo(b));
LinkedList<String> link = new LinkedList<>(Arrays.asList(arr));
HashSet<String> set = new HashSet<>(link);
String ans = "";
while (link.size() > 0) {
String str = link.removeLast();
int end = str.length() - 1;
if(end == 0 && "".equals(ans)) {
ans = str;
continue;
}
while (set.contains(str.substring(0, end))) {
if (end == 1) {
return str;
} else {
end--;
}
}
}
return ans;
}
}
优化逻辑
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = sc.nextLine().split(" ");
System.out.println(getResult(arr));
}
public static String getResult(String[] arr) {
Arrays.sort(arr, (a, b) -> a.length() != b.length() ? a.length() - b.length() : a.compareTo(b));
LinkedList<String> link = new LinkedList<>(Arrays.asList(arr));
HashSet<String> set = new HashSet<>(link);
while (link.size() > 0) {
String str = link.removeLast();
int end = str.length() - 1;
if (end == 0) {
return str;
}
while (set.contains(str.substring(0, end))) {
if (end == 1) {
return str;
} else {
end--;
}
}
}
return "";
}
}
Python算法源码
# 输入获取
arr = input().split()
# 算法入口
def getResult(arr):
arr.sort(key=lambda s: (len(s), [ord(c) for c in s]))
setA = set(arr)
ans = ""
while len(arr) > 0:
s = arr.pop()
end = len(s) - 1
if end == 0 and ans == "":
ans = s
continue
while s[:end] in setA:
if end == 1:
return s
else:
end -= 1
return ans
# 算法调用
print(getResult(arr))
优化逻辑
# 输入获取
arr = input().split()
# 算法入口
def getResult(arr):
arr.sort(key=lambda s: (len(s), [ord(c) for c in s]))
setA = set(arr)
while len(arr) > 0:
s = arr.pop()
end = len(s) - 1
if end == 0:
return s
while s[:end] in setA:
if end == 1:
return s
else:
end -= 1
return ""
# 算法调用
print(getResult(arr))
免责声明:
1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文
评论0