Airbnb 希望支持基于用户评论的搜索。为了提升搜索效果,需要把评论中的特定词语打上标签。
给定:
Review:
"I visited San Francisco for work and stayed at Airbnb. I really loved the city and the home where I stayed."
Tags:
{
"Airbnb": "business",
"san francisco": "city"
}如果评论中出现了 tag 的 key,就需要把该词改写成:
[tag_value]{原词}输出:
"I visited [city]{San Francisco} for work and stayed at [business]{Airbnb}.
I really loved the city and the home where I stayed."这题表面是字符串替换,实际重点在这些细节:
- 大小写匹配
- tag 里是
san francisco - 原文里是
San Francisco - 通常需要 case-insensitive match,但保留原文大小写输出。
- tag 里是
- 多词匹配
san francisco是两个词,不是单个 token。- 简单按空格 split 不够。
- 避免错误替换
- 不能把单词内部误匹配。
- 例如
Airbnb可以匹配,但不能随意匹配某个词的一部分。
- 输出格式构造
- 匹配到的原文片段要保留。
- 输出格式是
[metadata]{matched_text}。
可以把所有 tag key 按长度从长到短排序,然后扫描 review:
1. 从当前位置开始,尝试匹配最长的 tag key
2. 如果匹配成功,输出 [tag]{原文片段}
3. 如果没有匹配,正常输出当前字符
4. 继续向后扫描为什么要按长度从长到短?
因为如果 tags 里同时有:
"san": "xxx"
"san francisco": "city"应该优先匹配更长的 san francisco。
这是一道典型的字符串匹配题,难点不在代码量,而在边界条件:大小写、多词匹配、最长匹配和原文格式保留。
CSOAHelp 可以帮助候选人:
快速理解题意
拆解核心考点
准备高质量解题思路
模拟面试表达
优化代码与复杂度分析如果你正在准备 Airbnb、Google、TikTok、OpenAI 等公司的技术面试,CSOAHelp 可以提供真实面试题解析和面试陪练支持。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

