Map相关习题 138复制带随机指针的链表 旧键盘(20) - 牛客
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map相关习题 138复制带随机指针的链表 旧键盘(20) - 牛客相关的知识,希望对你有一定的参考价值。
目录
思路:遍历原链表,构造新链表的节点,存储在Map中。原链表与新链表一一对应,原1.next 和 新1.next 一一对应;原1.random 和 新1.random 一一对应;原1.next = 原3 => 新1.next = 新3
class Solution
public Node copyRandomList(Node head)
// 边界
if (head == null)
return null;
//遍历原链表,构造新链表的节点,存储在Map中
//Map<原链表节点,新链表节点>
//原1 => 新1
Map<Node,Node> nodeMap = new HashMap<>();
for (Node x = head;x != null;x = x.next)
//构造新链表节点
Node node = new Node(x.val);
nodeMap.put(x,node);
//对新链表进行连接操作
//原1.next 和 新1.next 一一对应
//原1.random 和 新1.random 一一对应
//原1.next = 原3 => 新1.next = 新3(这个地址就可以根据原3来取得)
for (Node x = head;x != null;x = x.next)
//新链表的random和next和原链表一一对应
//对于Map来说,Key都是原链表的节点
//原1.next= 原3
nodeMap.get(x).next = nodeMap.get(x.next);
//原1.random = 原5
nodeMap.get(x).random = nodeMap.get(x.random);
//返回原链表的头节点,就是原链表的head的映射
return nodeMap.get(head);
旧键盘(20) - 牛客
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。
输入:7_This_is_a_test<br/>_hs_s_a_es 输出:7TI
思路:所谓坏键就是实际不存在但期望中存在的键,先将字符串全部转为大写的,再遍历实际中存储的字符串保存在Set中,因为Set集合不包含重复元素;然后遍历期望输出的字符串使用Set集合过滤出已经出现的坏键。
import java.util.*;
/**
* 坏键盘
* @author wyc
* @date 2022/03/16 10:34
**/
public class Main
public static void main(String[] args)
Scanner scanner = new Scanner(System.in);
//期望输入的
String exceptedStr = null;
//实际输入的
String actualStr = null;
while (scanner.hasNext())
exceptedStr = scanner.next();
actualStr = scanner.next();
//输出全是大写的,将输入的字符串转为大写处理 toUpperCase
exceptedStr = exceptedStr.toUpperCase();
actualStr = actualStr.toUpperCase();
//遍历实际存储的字符串,使用Set集合存储不重复的字符
Set<Character> actualSet = new HashSet<>();
for (int i = 0; i < actualStr.length(); i++)
actualSet.add(actualStr.charAt(i));
//拿着实际输入的Set集合来遍历期望输入的字符串
//坏键就是期望有,但实际存储没有
//再用一个Set来去重,去的是实际字符串中重复存储的元素
Set<Character> exceptedSet = new HashSet<>();
for (int i = 0; i < exceptedStr.length(); i++)
char c = exceptedStr.charAt(i);
//坏键就是期望有,实际没有
if (!actualSet.contains(c))
//去重
if (exceptedSet.add(c))
//c确实是期望有,但实际中没有,而且第一次出现的
System.out.print(c);
System.out.println();
本小节完^_^
以上是关于Map相关习题 138复制带随机指针的链表 旧键盘(20) - 牛客的主要内容,如果未能解决你的问题,请参考以下文章