葫芦娃千万影片,点燃你的视听盛宴!

核心内容摘要

jm漫画:在数字次元里,释放你的无限想象
黑田的漫画王国:宅家时光的极致浪漫

甘雨:当冰封的爱意遇上滚烫的思念,白水难题如何化解?

(新卷,100分)- 单词接龙Java JS Python题目描述单词接龙的规则是可用于接龙的单词首字母必须要前一个单词的尾字母相同当存在多个首字母相同的单词时取长度最长的单词如果长度也相等则取字典序最小的单词已经参与接龙的单词不能重复使用。

现给定一组全部由小写字母组成单词数组并指定其中的一个单词作为起始单词进行单词接龙请输出最长的单词串单词串是单词拼接而成中间没有空格。

输入描述输入的第一行为一个非负整数表示起始单词在数组中的索引K0 K N 输入的第二行为一个非负整数表示单词的个数N接下来的N行分别表示单词数组中的单词。

备注单词个数N的取值范围为[1, 20]单个单词的长度的取值范围为[1, 30]输出描述输出一个字符串表示最终拼接的单词串。

用例输入06worddddadcdwordd输出worddwordda说明先确定起始单词word再接以d开头的且长度最长的单词dword剩余以d开头且长度最长的有dd、da、dc则取字典序最小的da所以最后输出worddwordda。

输入46worddddadcdwordd输出dwordda说明先确定起始单词dword剩余以d开头且长度最长的有dd、da、dc则取字典序最小的da所以最后输出dwordda。

题目解析逻辑题主要考察数组操作如数组元素删除数组自定义排序。

我的解题思路如下先用splice方法将起始单词从输入数组中删除splice会将删除的元素形成一个新数组我刚好将该数组作为收集接龙单词的链条数组chain。

之后遍历输入数组中剩下的单词将它们根据首字母进行分类同一个首字母的单词存放在一个数组中。

存储容器选择对象prefix首字母作为对象的属性存放同首单词的数组为对象的属性值。

当统计完后对每个分类数组进行排序即优先按照单词长度降序如果单词长度相同再按照字典序升序。

之后取出chain的尾巴元素再取出尾巴元素单词的尾巴字符tail如果存在prefix[tail]则取出prefix[tail]数组的头部元素加入chain中然后继续循环前面逻辑如果不存在prefix[tail]则结束循环将chain.join() 当成结果输出。

JavaScript算法源码/* JavaScript Node ACM模式 控制台输入获取 */ const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines []; let k, n; rl.on(line, (line) { lines.push(line); if (lines.length

{ [k, n] lines.map(Number); } if (n lines.length n

{ lines.shift(); lines.shift(); console.log(getResult(lines, k)); lines.length 0; } }); function getResult(words, k) { const chain words.splice(k,

; const prefix {}; for (let word of words) { const w word[0]; prefix[w] ? prefix[w].push(word) : (prefix[w] [word]); } for (let key in prefix) { prefix[key].sort((a, b) a.length ! b.length ? b.length - a.length : a b ? 1 : -1 ); } while (true) { let tail chain.at(-

.at(-

; if (prefix[tail] prefix[tail].length

{ chain.push(prefix[tail].shift()); } else { break; } } return chain.join(); }Java算法源码import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); int k sc.nextInt(); int n sc.nextInt(); String[] words new String[n]; for (int i 0; i n; i) words[i] sc.next(); System.out.println(getResult(k, n, words)); } public static String getResult(int k, int n, String[] words) { ArrayListString chain new ArrayList(); chain.add(words[k]); words[k] null; HashMapCharacter, LinkedListString prefix new HashMap(); for (String word : words) { if (word ! null) { char c word.charAt(

; prefix.putIfAbsent(c, new LinkedList()); prefix.get(c).add(word); } } for (Character c : prefix.keySet()) { prefix .get(c) .sort((a, b) - a.length() ! b.length() ? b.length() - a.length() : a.compareTo(b)); } while (true) { String tail chain.get(chain.size() -

; char c tail.charAt(tail.length() -

; if (prefix.containsKey(c) prefix.get(c).size()

{ chain.add(prefix.get(c).removeFirst()); } else { break; } } StringBuilder sb new StringBuilder(); for (String s : chain) sb.append(s); return sb.toString(); } }Python算法源码# 输入获取 k int(input()) n int(input()) words [input() for _ in range(n)] # 算法入口 def getResult(): chain [words.pop(k)] prefix {} for word in words: w word[0] if prefix.get(w) is None: prefix[w] [] prefix[w].append(word) for w in prefix.keys(): prefix[w].sort(keylambda x: (-len(x), [ord(i) for i in x])) while True: tail chain[-1][-1] if prefix.get(tail): chain.append(prefix[tail].pop(

) else: break return .join(chain) # 调用算法 print(getResult())

男人的困困放在女人困里电视剧免费-男人的困困放在女人困里电视剧免费应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123