阅读视图

发现新文章,点击刷新页面。

每日一题-统计相似字符串对的数目🟢

给你一个下标从 0 开始的字符串数组 words

如果两个字符串由相同的字符组成,则认为这两个字符串 相似

  • 例如,"abca""cba" 相似,因为它们都由字符 'a''b''c' 组成。
  • 然而,"abacba""bcfd" 不相似,因为它们不是相同字符组成的。

请你找出满足字符串 words[i] words[j] 相似的下标对 (i, j) ,并返回下标对的数目,其中 0 <= i < j <= words.length - 1

 

示例 1:

输入:words = ["aba","aabb","abcd","bac","aabc"]
输出:2
解释:共有 2 对满足条件:
- i = 0 且 j = 1 :words[0] 和 words[1] 只由字符 'a' 和 'b' 组成。 
- i = 3 且 j = 4 :words[3] 和 words[4] 只由字符 'a'、'b' 和 'c' 。 

示例 2:

输入:words = ["aabb","ab","ba"]
输出:3
解释:共有 3 对满足条件:
- i = 0 且 j = 1 :words[0] 和 words[1] 只由字符 'a' 和 'b' 组成。 
- i = 0 且 j = 2 :words[0] 和 words[2] 只由字符 'a' 和 'b' 组成。 
- i = 1 且 j = 2 :words[1] 和 words[2] 只由字符 'a' 和 'b' 组成。 

示例 3:

输入:words = ["nba","cba","dba"]
输出:0
解释:不存在满足条件的下标对,返回 0 。

 

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i] 仅由小写英文字母组成

响应式数据管理:ref与reactive

前言 在讲setup的文章中我们已经看到了点击按钮后函数执行了但却不会引起视图更新,这是因为它们的数据不是响应式的数据,而这就不得不提到本文的主角ref和reactive了,这两者虽然都可以用于实现响

结束系统进程的操作方式

Windows 系统操作方式 任务管理器 打开任务管理器,找到对应的进程,右键选择“结束进程”; 点击“确定”后,进程将被强制关闭,无法恢复; 终端 - 进程查询 打开终端,输入命令 taskkill

前端面试题

以下是一些前端面试题: 一、HTML/CSS部分 如何实现一个响应式的导航菜单,在移动设备上能够以汉堡菜单的形式展示? 答案: 使用CSS媒体查询来检测屏幕宽度。 在HTML中,创建导航菜单结构,包含

Web - JS基础语法与表达式

这篇文章主要介绍了 JavaScript 的基础语法,包括代码书写位置、ERPL 环境、变量(命名规则、默认值、初始化)、数据类型(基本和复杂,及各类型特点、转换)、表达式和运算符(算数、特殊算数。

【C/C++】哈希表 + 位运算(状态压缩) 简洁明了

解题思路

1.哈希表 + 位运算(状态压缩)

由于单词只由小写字母构成,所以可以把单词中字符是否出现的状态用int的低26位表示,不同单词经过位运算操作后得到相同的值,
那么就可以说明这两个单词由相同类型的字符组成。我们可以维护一个哈希表,key记录单词压缩后的int值, value记录单词个数。
答案要求的是满足条件的对数!所以应该把它们依次加起来,注意一定是先加入答案 再自增!
比如某个状态的value为4 表示该字符组合的单词有4个 共有 3 + 2 + 1 + 0 = 6对!不会把4加入答案!

代码

###c

typedef struct {
    int key;
    int value;
    UT_hash_handle hh;
} el;

int similarPairs(char ** words, int wordsSize){
    el* head = NULL;
    int ans = 0;
    for (int i = 0; i < wordsSize; ++i) {
        int bit = 0, len = strlen(words[i]);
        for (int j = 0; j < len; ++j) bit |= (1 << (words[i][j] - 'a'));
        el* cur = NULL;
        HASH_FIND_INT(head, &bit, cur);
        if (NULL == cur) {
            cur = (el*)malloc(sizeof(el));
            cur->key = bit; cur->value = 0;
            HASH_ADD_INT(head, key, cur);
        }
        ans += cur->value++;
    }
    el* cur, *tmp;
    HASH_ITER(hh, head, cur, tmp) {
        HASH_DEL(head, cur);
        free(cur);
    }
    return ans;
}

###c++

class Solution {
public:
    int similarPairs(vector<string>& words) {
unordered_map<int, int> mp;
int n = words.size(), ans = 0;
for (auto& word : words) {
int bit = 0;
for (auto& ch : word) bit |= (1 << (ch - 'a'));
ans += mp[bit]++;
}
return ans;
    }
};

时间复杂度 O(nm) n=words的长度 m=所有字符和
空间复杂度 O(n) 主要是哈希表消耗的空间

数学

解法:数学

设包含相同字符集的字符串共有 $x$ 个,则答案就是 $\frac{x(x - 1)}{2}$ 之和。复杂度 $\mathcal{O}(\sum|s|)$。

参考代码(c++)

###c++

class Solution {
public:
    int similarPairs(vector<string>& words) {
        unordered_map<int, int> mp;
        for (string &s : words) {
            int msk = 0;
            for (char c : s) msk |= 1 << (c - 'a');
            mp[msk]++;
        }
        int ans = 0;
        for (auto it = mp.begin(); it != mp.end(); it++) {
            int x = it->second;
            ans += x * (x - 1) / 2;
        }
        return ans;
    }
};

线性做法:枚举右,维护左(Python/Java/C++/Go/JS/Rust)

推荐先把 1512. 好数对的数目 做了。

为方便统计,把字符串 $s$ 中出现过的字母视作一个集合,把这个集合压缩成一个二进制数 $\textit{mask}$。其中 $\textit{mask}$ 第 $i$ 位为 $1$ 表示第 $i$ 个小写字母在 $s$ 中,为 $0$ 表示不在。这个技巧的详细解释见 从集合论到位运算,常见位运算技巧分类总结!

遍历 $\textit{words}$ 的同时,用一个哈希表 $\textit{cnt}$ 维护 $\textit{words}[i]$ 对应的 $\textit{mask}$ 的出现次数。和 1512 题一样,先把 $\textit{cnt}[\textit{mask}]$ 加到答案中,然后把 $\textit{cnt}[\textit{mask}]$ 加一。这个顺序可以保证我们只会统计 $i<j$ 的下标对,不会把 $i=j$ 的情况也统计进去。

class Solution:
    def similarPairs(self, words: List[str]) -> int:
        ans = 0
        cnt = defaultdict(int)
        for s in words:
            mask = 0
            for c in s:
                mask |= 1 << (ord(c) - ord('a'))
            ans += cnt[mask]
            cnt[mask] += 1
        return ans
class Solution {
    public int similarPairs(String[] words) {
        Map<Integer, Integer> cnt = new HashMap<>();
        int ans = 0;
        for (String s : words) {
            int mask = 0;
            for (char c : s.toCharArray()) {
                mask |= 1 << (c - 'a');
            }
            int c = cnt.getOrDefault(mask, 0);
            ans += c;
            cnt.put(mask, c + 1);
        }
        return ans;
    }
}
class Solution {
public:
    int similarPairs(vector<string>& words) {
        unordered_map<int, int> cnt;
        int ans = 0;
        for (auto& s : words) {
            int mask = 0;
            for (char c : s) {
                mask |= 1 << (c - 'a');
            }
            ans += cnt[mask]++;
        }
        return ans;
    }
};
func similarPairs(words []string) (ans int) {
    cnt := map[int]int{}
    for _, s := range words {
        mask := 0
        for _, c := range s {
            mask |= 1 << (c - 'a')
        }
        ans += cnt[mask]
        cnt[mask]++
    }
    return
}
var similarPairs = function(words) {
    const cnt = new Map();
    let ans = 0;
    for (const s of words) {
        let mask = 0;
        for (const c of s) {
            mask |= 1 << (c.charCodeAt(0) - 'a'.charCodeAt(0));
        }
        const c = cnt.get(mask) ?? 0
        ans += c;
        cnt.set(mask, c + 1);
    }
    return ans;
};
use std::collections::HashMap;

impl Solution {
    pub fn similar_pairs(words: Vec<String>) -> i32 {
        let mut cnt = HashMap::new();
        let mut ans = 0;
        for s in words {
            let mut mask = 0;
            for c in s.bytes() {
                mask |= 1 << (c - b'a');
            }
            ans += *cnt.get(&mask).unwrap_or(&0);
            *cnt.entry(mask).or_insert(0) += 1;
        }
        ans
    }
}

复杂度分析

  • 时间复杂度:$\mathcal{O}(L)$,其中 $L$ 为 $\textit{words}$ 中所有字符串的长度之和。
  • 空间复杂度:$\mathcal{O}(n)$,其中 $n$ 为 $\textit{words}$ 的长度。哈希表需要 $\mathcal{O}(n)$ 的空间。

更多相似题目,见下面数据结构题单中的「§0.1 枚举右,维护左」。

分类题单

如何科学刷题?

  1. 滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环)
  2. 二分算法(二分答案/最小化最大值/最大化最小值/第K小)
  3. 单调栈(基础/矩形面积/贡献法/最小字典序)
  4. 网格图(DFS/BFS/综合应用)
  5. 位运算(基础/性质/拆位/试填/恒等式/思维)
  6. 图论算法(DFS/BFS/拓扑排序/最短路/最小生成树/二分图/基环树/欧拉路径)
  7. 动态规划(入门/背包/状态机/划分/区间/状压/数位/数据结构优化/树形/博弈/概率期望)
  8. 【本题相关】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)
  9. 数学算法(数论/组合/概率期望/博弈/计算几何/随机算法)
  10. 贪心与思维(基本贪心策略/反悔/区间/字典序/数学/思维/脑筋急转弯/构造)
  11. 链表、二叉树与回溯(前后指针/快慢指针/DFS/BFS/直径/LCA/一般树)
  12. 字符串(KMP/Z函数/Manacher/字符串哈希/AC自动机/后缀数组/子序列自动机)

我的题解精选(已分类)

欢迎关注 B站@灵茶山艾府

具身智能:以语料为翼,飞抵新高度

在科技浪潮汹涌澎湃的当下,人工智能领域又一盛事全球开发者先锋大会正在举办。本次大会聚焦前沿,其中深度探讨大模型、语料、算力、具身智能、科学智能以及其他“5+6”产业及领域的未来发展走向,为行业精英、开发者们提供一个思想碰撞与经验交流的绝佳平台。

语料互联 共创未来

语料是 AI 发展的根基,其质量和多样性直接影响 AI 模型性能。未来,语料相关工作需要更精细化的处理与更广泛的拓展。一方面,要针对不同的应用场景,构建专业化、领域化的语料库。比如在金融领域,收集整理各类金融资讯、财报数据、市场分析等,形成专业的金融语料库,助力 AI 在金融风险预测、投资策略制定等方面发挥更大作用;在教育领域,汇聚教学资料、学生作业、考试真题等语料,推动 AI 辅助教学工具的优化。

库帕思科技在这方面也进行了积极的探索,通过与金融机构和教育企业合作,协助构建符合行业特性的语料库,提升了 AI 在这些垂直领域的应用效果。另一方面,加强语料的多模态融合,将文本语料与图像、音频、视频等其他模态的数据相结合,拓展 AI 的感知与理解能力,为多模态交互的 AI 应用提供坚实支撑。库帕思科技在多模态语料的处理技术上也有所突破,能够更高效地整合不同类型的数据,让 AI 模型学习到更全面的信息。2024年10月,库帕思科技更是与相关单位共同发布全国首批人形机器人具身智能标准《人形机器人分类分级应用指南》团体标准和《具身智能智能化发展阶段分级指南》团体标准,为全国首批人形机器人具身智能标准。

本次大会上,库帕思科技携手相关企业,带来了《语料互联 共创未来》《语料新势力——驱动多域变革的无限可能》《语料标注的标准化之路:挑战与机遇》多场讲坛及会议。

具身智能:解锁未来世界的钥匙

具身智能产业则是另一个充满无限潜力的领域。具身智能强调智能体与物理世界的交互,通过身体的感知和行动来学习和决策。未来具身智能产业的发展,关键在于提升智能体的环境适应性和任务执行能力。一方面,研发更先进的传感器和执行器,让智能体能够更精准地感知周围环境,做出更灵活、高效的动作;另一方面,强化人工智能算法在具身智能中的应用,如强化学习算法,让智能体在与环境的不断交互中自主学习和优化策略。同时,拓展具身智能的应用场景,从工业制造、物流仓储到日常生活服务,让具身智能真正走进人们的生活。

漕河泾开发区内的人形机器人创新孵化器

此次全球开发者先锋大会漕河泾会场一直以来创新氛围浓厚,这里早已成为众多前沿科技探索的试验田 。长期以来,漕河泾开发区凭借自身完备的产业生态,吸引了大量深耕科学智能和具身智能领域的企业与开发者汇聚。这些业内先锋不仅带来了前沿的技术理念,更积累了丰富的实践经验。

在本次大会中,漕河泾开发区更是全力支持一系列极具价值的讲坛和活动。计划于2月23日上午,在漕河泾会议中心开展《具身智能:解锁未来世界的钥匙》讲坛,由上海市人形机器人创新孵化器、国家机器人检测与评定中心、上海市漕河泾新兴技术开发区发展总公司承办,国家地方共建人形机器人创新中心协办。

聚焦于具身智能、语料等各领域,形成合力,漕河泾开发区成熟的配套设施和技术资源,正全力为大会的顺利开展保驾护航,助力每一场交流与研讨都能高效进行。

全球开发者先锋大会是一场不容错过的科技盛宴。无论你是科学智能领域的探索者,还是具身智能产业的从业者,都能在这里找到新的灵感和方向。让我们齐聚一堂,共同探索科学与具身智能产业的未来发展之路,携手开创人工智能领域的新篇章!一起见证科技的无限可能!

最低调“六小虎”阶跃星辰开年首秀:Agent落地智能终端,印奇也来了|最前线

文|周鑫雨

编辑|苏建勋

2025年2月21日举办的生态开放日上,“AI六小虎”阶跃星辰交出了一份模型答卷。其中既包括探索AGI的下一个阶段、模型落地的形态,也隐晦地包括,阶跃星辰面对DeepSeek的态度。

2024年,阶跃星辰毫无疑问是模型层的“卷王”。去年,这家成立最晚的六小虎,一口气发布了11款模型,涵盖了语言、语音、视觉、推理等多个模态。

阶跃星辰模型矩阵。

在模型层上的狂飙,与阶跃星辰的AGI探索路线有关。阶跃星辰CEO姜大昕曾告诉《智能涌现》,成立第一天起,阶跃星辰就确定了AGI路径:单模态—多模态—多模理解和生成的统一—世界模型—AGI(通用人工智能)。

可以说,2024年,阶跃星辰已经走到了多模态的节点。但开启“多模态理解和生成的统一”前,这家六小虎首先需要面对的,是DeepSeek的掀桌。

2024年以来,大模型赛道因DeepSeek这条“鲶鱼”,发生了诸多变化。一方面,DeepSeek API率先开启了模型价格战,将大模型价格杀到了1元/百万tokens;另一方面,开源推理模型DeepSeek R1,让行业开始反思Scaling Law的暴力美学。

不少从业者认为,DeepSeek对六小虎的影响是巨大的。R1等高性能模型的开源,让闭源模型的商业化面临更多的挑战。而R1采取的低投入的强化学习训练范式,也让六小虎的高估值和大举烧钱,受到更多的质疑。

如何面对DeepSeek,成了当下六小虎的最重要命题。降低模型API业务重要性,转向C端,是几家模型企业当下策略调整的方向,比如MiniMax缩减了To B团队,并将DeepSeek R1接入了自己的AI助手平台。

阶跃星辰及时应对的姿态,是开源。

即便没有直接叫板DeepSeek,但这两款在R1发布后立刻开源的模型,也被视作阶跃星辰捍卫技术地位的无声回应。值得注意的是,阶跃星辰开源的是两款多模态模型,与注重文本模型的DeepSeek形成了差异。

阶跃星辰开源两款多模态模型。

其中一个开源模型,是300亿参数的图生视频模型Step-Video-T2V,这也是目前全球参数量最大的图生视频模型。另一个被开源的,是1300亿参数的语音交互模型Step-Audio。

姜大昕在开放日上透露,在2025年3月,阶跃星辰计划开源又一个图生视频模型。

回到探索AGI的下一个阶段,多模态推理,是阶跃星辰看好的模型发展方向。

这一观点,在行业内也得到不少人的认同。比如《智能涌现》曾独家报道,百度集团执行副总裁、百度智能云事业群总裁沈抖判断,行业的重心将从训练转移到推理,多模态会成为主流的需求。

多模态从生成转向推理,意味着多模态模型不仅仅能生成图片、视频,还要能看懂其中的内容。

阶跃星辰在多模态推理模型上的进展。

在生态日上,阶跃星辰宣布了和清华大学研发的Open-Reasoner-Zero,这是首个从预训练模型直接进行大规模强化学习的开源推理模型,效率是DeepSeek-R1-Zero的25倍

姜大昕也透露了一项正在推进的内部项目:视觉推理模型。他提到,这一模型能够实现视觉空间下的慢思考。这意味着,看到一张路线图,模型能够回答出“沿着箭头走,最终的目的地是什么”。

阶跃星辰看好的模型落地方向,则是AI Agent。

为什么2025年是Agent的爆发年?在姜大昕看来,影响Agent的两个关键因素,多模态和慢思考(长思维链推理可以解决复杂问题),在2024年都有了显著的进展。

阶跃星辰对Agent的态度,是直接落地。姜大昕将Agent分为两个大类:垂类Agent和智能终端Agent。

阶跃星辰Agent合作生态。

在两个方向,阶跃星辰都选择和下游客户进行生态共创。比如,在垂类领域,阶跃星辰和财联社研发了财经金融信息助手“AI小财神”;在智能终端领域,阶跃星辰的Agent,也接入了吉利汽车、OPPO、乐森机器人等终端厂商的产品中。

阶跃星辰和财联社合作研发的财经金融信息助手“AI小财神”。

值得一提的是,创立了“AI四小龙”旷视科技的印奇,带着新身份出现在了生态日的圆桌论坛上。如今,他是自动驾驶公司“千里科技”的董事长。他认为,目前最成功的AI产品,仍然是特斯拉和抖音,不过,大模型也将给应用带来更大的市场空间。

旷视科技创始人、千里科技董事长印奇参加阶跃星辰圆桌论坛。

欢迎交流!

欢迎关注!

日本拟邀请特斯拉投资日产汽车?特斯拉前董事否认参与

2月21日,特斯拉前董事水野弘道在社交媒体平台X发文,否认其在“日本财团起草特斯拉投资日产汽车的计划”有关联,“我也不知道日本政府有任何此类举动”。此前有市场消息称,知情人士透露,日本高层小组计划与马斯克接洽,邀请特斯拉投资日产。报道称,由水野弘道领导的这项新提案得到了日本前首相菅义伟的支持。(界面)

奥飞数据:公司经营情况及内外部经营环境未发生重大变化

36氪获悉,奥飞数据发布股票交易异常波动公告称,经公司自查,公司经营情况及内外部经营环境未发生重大变化。公司主营业务覆盖IDC服务、其他互联网综合服务及算力相关业务等,其中IDC服务主要为大型互联网公司、云厂商等客户提供数据中心服务器(包括常规服务器、AI服务器)托管业务,而其他互联网综合服务则包括传输业务、国内头部云厂商云服务销售业务等业务内容。此外,公司还通过控股子公司开展分布式光伏的投资运营业务。

龙蟠科技:三级控股子公司拟增资扩股并引入投资者

36氪获悉,龙蟠科技发布公告,公司三级控股子公司锂源(印尼)拟增资扩股并引入投资者。LG ENERGY SOLUTION, LTD.拟以现金出资1597.09万美元,认购25.59万股标的公司新发行的普通股,取得锂源(印尼)新股发行完成后20%的股权。本次交易不会导致公司合并报表范围发生变化。

奥迪CEO:将在北美扩大生产,重点面向美国市场

据路透消息,奥迪CEO高德诺(Gernot Döllner)2月21日接受采访称,奥迪将在北美扩大生产,重点生产面向美国市场的“最重要产品”。高德诺表示:“我们可利用大众集团现有工厂,也可建立额外产能。我们对各种解决方案持开放态度,并正在评估各种方案。我们将在年内做出决定。”他拒绝具体说明生产基地是否将设在美国。(界面)

热门中概股美股盘前普涨,哔哩哔哩涨超6%

36氪获悉,热门中概股美股盘前普涨,截至发稿,哔哩哔哩涨超6%,理想汽车、富途控股涨超5%,小鹏汽车涨超4%,阿里巴巴、百度、爱奇艺涨超3%,拼多多、蔚来涨超2%,京东、网易涨超1%。
❌