携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
适逢周六,虽是休息日,题感不能放下
数组中的字符串匹配
该题出自力扣的1408题 —— 数组中的字符串匹配【简单题】,也是今天每日一题
审题
给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。
- 题意并不复杂,就是给出一个字符串数组,要求返回一个列表是子字符串
- 首当其冲的便是想到冒泡算法
- 两个for循环
- 利用String的contain方法,判断是否为子字符串
- 因为是双重for循环,并且搭配长度的校验作为剪枝,所以可以实现list的查重
编码
class Solution {
public List<String> stringMatching(String[] words) {
List<String> list = new ArrayList<>();
for (String a:words) {
for (int i = 0; i < words.length; i++) {
if (a.length() >= words[i].length())continue;
if (words[i].contains(a)){
list.add(a);
break;
}
}
}
return list;
}
}
链表随即节点
该题出自力扣的382题 ——链表的随机节点【中等题】
审题
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现 Solution 类:
- Solution(ListNode head) 使用整数数组初始化对象。
- int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。
- 该题题意不难,需要返回一个链表的随机节点里面的值
- 提供了两个方法
- 初始化方法
- 初始化Random方法,作为随机的支撑
- 定义一个列表,存储链表
- 循环链表,依次存入列表中
- 返回随机值的方法
- 利用列表的长度,选出随机下标
- 利用选出的随机下标,找到对应的链表节点,并返回对应的值
- 初始化方法
编码
class Solution {
Random random;
List<ListNode> listNodes = new ArrayList<>();
public Solution(ListNode head) {
random = new Random();
while (head != null){
listNodes.add(head);
head = head.next;
}
}
public int getRandom() {
int i = random.nextInt(listNodes.size());
return listNodes.get(i).val;
}
}