网易首页 > 网易号 > 正文 申请入驻

2026-06-23:合并靠近字符。用go语言,现有仅含小写字母的字符串s与整数k,规则说明如下: 1. 判定标准:同一字符串里,若两个相同字母的

0
分享至

2026-06-23:合并靠近字符。用go语言,现有仅含小写字母的字符串s与整数k,规则说明如下:

  1. 1. 判定标准:同一字符串里,若两个相同字母的位置索引差值不超过k,这两个字符视作相邻靠近字符。

  2. 2. 合并规则:满足靠近条件的一对字符,右边字符直接并入左边字符的位置;合并操作一轮只能处理一组,每完成一次合并就生成新字符串,循环执行直到不存在可合并字符。

  3. 3. 合并优先级(每次操作只选一组合并):
    ① 优先挑选左侧索引数字最小的那一组可合并字符;
    ② 若多组字符左侧索引相同,再从中选右侧索引数字最小的一组执行合并。

  4. 4. 输出要求:输出全部合并结束后得到的最终字符串。

1 <= s.length <= 100。

1 <= k <= s.length。

s 由小写英文字母组成。

输入: s = "yybyzybz", k = 2。

输出: "ybzybz"。

解释:

下标 i = 0 和 i = 1 处的字符 'y' 是靠近的,因为 1 - 0 = 1 <= k。

将它们合并到左侧的 'y',得到 s = "ybyzybz"。

现在下标 i = 0 和 i = 2 处的字符 'y' 是靠近的,因为 2 - 0 = 2 <= k。

将它们合并到左侧的 'y',得到 s = "ybzybz"。

没有其他相同的字符是靠近的,因此不再发生合并。

题目来自力扣3853。

好的,我们先按照题目规则和提供的代码,一步步分析这个合并过程的逻辑,并对比题目描述来验证。

大体过程详细分解 第一步:理解合并规则

  • • 相同字符如果在当前字符串中的位置索引差 ≤k,就认为它们“靠近”。

  • • 每次只选一组进行合并:

  1. 1. 优先选左侧索引最小的那一组;

  2. 2. 如果左侧索引相同,则选右侧索引最小的那一组。

• 合并的方式是:右侧字符删除,左侧字符保留(相当于右侧合并到左侧)。

注意:合并后字符串长度减 1,后续位置索引会重新计算。

第二步:代码实现思路分析(非代码,只说明逻辑)

提供的mergeCharacters函数做的是一次遍历过滤重复字符,不是模拟题目描述的“循环合并”。它的核心逻辑是:

  • • 用一个last[26]数组,记录每个字母最近一次被保留在结果中的位置。

  • • 遍历原字符串的每一个字符:

    • • 如果当前字符距离它上一次保留的位置 >k,就保留它,并更新last

    • • 否则就跳过(合并掉)。

这个逻辑相当于:

  • • 从左到右扫描,只保留那些和前一个同类字符距离超过 k的字符。

  • • 这实际上执行的是“消除所有靠近字符中的右边那个”,但由于是一次从左到右的贪心,它的结果等价于每次都合并最左侧可合并对中的右侧字符,反复进行直到没有靠近字符。

第三步:对照示例,模拟整个过程

初始字符串:"yybyzybz",k=2,索引从 0 开始:

初始状态:

  • • 索引0: y

  • • 索引1: y → 与索引0距离=1 ≤ 2,符合靠近 → 合并右侧(索引1),保留索引0
    得到新串:"ybyzybz"(删除了原索引1的 y)

当前串:"ybyzybz"

索引:
0: y
1: b
2: y
3: z
4: y
5: b
6: z

现在找最近的可合并对:

  • • 看字符 y:索引0 和索引2,距离=2 ≤ 2 → 可合并,右侧为索引2

  • • 字符 y 还有索引2 和索引4,距离=2 ≤ 2 → 也可合并,但是左侧索引2 > 0,所以优先选左侧索引最小的 (0,2)
    合并 (0,2),删除索引2的 y
    得到新串:"ybzybz"

当前串:"ybzybz"

索引:
0: y
1: b
2: z
3: y
4: b
5: z

检查所有相同字符对:

  • • y: 索引0 和索引3,距离=3 > 2,不靠近

  • • 其他字符不重复或距离 > k
    因此没有可合并字符,结束。

最终结果:"ybzybz",与题目输出一致。

第四步:代码逻辑与实际合并过程的关系

  • • 代码一次遍历,做的其实是上述步骤的压缩版本:

    • • 它保留每个字符第一次出现后,只有距离超过 k 的下一个同类字符才会被保留,中间的都会被丢弃。

    • • 这正好等价于反复合并最左可合并对,因为每次合并后,右侧字符消失,左侧字符仍在原位置,后续字符左移,但代码的“距离>k才保留”规则恰恰模拟了这种“删除右侧靠近字符”的操作。

复杂度分析
  • 时间复杂度
    遍历一次字符串,每个字符只处理一次,每次操作是 O(1)(数组索引和比较)。
    设 n = s.length,时间复杂度为O(n)

  • 额外空间复杂度
    使用了一个长度为 26 的数组记录最后出现位置,以及一个字节切片存储结果(长度最多 n)。
    因此额外空间是 O(1)(常数大小)加上结果存储空间(输出必须的,不计入额外空间时,只算辅助空间,则为 O(1))。

最终答案

  • • 时间复杂度:O(n)

  • • 额外空间复杂度:O(1)(不包括输出字符串本身)

Go完整代码如下:

package main

import (
"fmt"
)

func mergeCharacters(s string, k int)string {
last := [26]int{}
for i := range last {
last[i] = -k - 1// 保证首次遇到字母 i 时,len(ans)-last[i] > k 是 true
}

ans := []byte{}
for _, ch := range s {
// ch 在 ans 中的下标是 len(ans)
iflen(ans)-last[ch-'a'] > k {
last[ch-'a'] = len(ans)
ans = append(ans, byte(ch))
}
}
returnstring(ans)
}

func main() {
s := "yybyzybz"
k := 2
result := mergeCharacters(s, k)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

def merge_characters(s: str, k: int) -> str:
# 初始化 last 数组,每个字母的上次出现位置,初始值设为 -k-1
last = [-k - 1] * 26
ans = []

for ch in s:
idx = ord(ch) - ord('a')
# 如果当前字符与上次出现位置的距离大于 k,则保留
iflen(ans) - last[idx] > k:
last[idx] = len(ans)
ans.append(ch)

return''.join(ans)

if __name__ == "__main__":
s = "yybyzybz"
k = 2
result = merge_characters(s, k)
print(result)

C++完整代码如下:

  



std::string mergeCharacters(const std::string& s, int k) {
// 初始化 last 数组,每个字母的上次出现位置,初始值设为 -k-1
std::vector last(26, -k - 1);
std::string ans;

for (char ch : s) {
int idx = ch - 'a';
// 如果当前字符与上次出现位置的距离大于 k,则保留
if (static_cast(ans.size()) - last[idx] > k) {
last[idx] = static_cast(ans.size()); // 记录加入前的索引(即新字符的下标)
ans.push_back(ch);
}
}
return ans;
}

int main() {
std::string s = "yybyzybz";
int k = 2;
std::string result = mergeCharacters(s, k);
std::cout << result << std::endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
广东一地教育局原局长,被查

广东一地教育局原局长,被查

南方都市报
2026-08-07 16:45:55
第33届视帝之争,热度居高不下,胡歌、陈晓、靳东三位实力派入围

第33届视帝之争,热度居高不下,胡歌、陈晓、靳东三位实力派入围

草莓解说体育
2026-08-07 14:48:53
贝克汉姆重返巨人:曾以5476码列队史第二,誓言要为纽约夺冠

贝克汉姆重返巨人:曾以5476码列队史第二,誓言要为纽约夺冠

绿茵狂热者
2026-08-06 23:46:20
知名女演员自曝破产,39岁失业在家找母亲要生活费,为何能这么惨

知名女演员自曝破产,39岁失业在家找母亲要生活费,为何能这么惨

娱乐半边街
2026-08-05 20:23:27
中国已经成为全球第一个集体拒接电话的国家

中国已经成为全球第一个集体拒接电话的国家

黯泉
2026-06-26 10:44:35
朝鲜向俄部署弹道导弹,不仅仅是打击乌克兰,暗中瞄准更大目标?

朝鲜向俄部署弹道导弹,不仅仅是打击乌克兰,暗中瞄准更大目标?

史料布籍
2026-08-07 21:43:56
WTT横滨冠军赛太残酷了:随着陈垣宇0-3,国乒男单军团全军覆没

WTT横滨冠军赛太残酷了:随着陈垣宇0-3,国乒男单军团全军覆没

侧身凌空斩
2026-08-07 18:39:01
两性心理学:敢和别人老婆“偷情”的男人,绝大多数都会有这两个“心理”,超准

两性心理学:敢和别人老婆“偷情”的男人,绝大多数都会有这两个“心理”,超准

心理观察局
2026-07-16 06:35:04
1984年粟裕逝世,在他遗体前站着的4位军队首长,职位一个比一个高

1984年粟裕逝世,在他遗体前站着的4位军队首长,职位一个比一个高

磊子讲史
2026-08-04 15:08:18
“竹知了事件” 大反转,公关彻底失控了!

“竹知了事件” 大反转,公关彻底失控了!

广告创意
2026-08-05 17:23:52
冰岛惬意度假,伊万卡与丈夫相守多年恩爱不减

冰岛惬意度假,伊万卡与丈夫相守多年恩爱不减

墨薷桃桃
2026-08-07 10:31:32
女子去男友朋友店工作,入职一周便发生关系2次,女子报警称遭骚扰,朋友被判强奸,后因证据不足改判无罪

女子去男友朋友店工作,入职一周便发生关系2次,女子报警称遭骚扰,朋友被判强奸,后因证据不足改判无罪

观威海
2025-08-07 21:14:11
宇树科技打新全攻略来了!速看

宇树科技打新全攻略来了!速看

新浪财经
2026-08-07 18:11:33
交警再次提醒:误闯红灯后只需一个动作,可以从扣6分变成只扣1分

交警再次提醒:误闯红灯后只需一个动作,可以从扣6分变成只扣1分

今日观众
2026-07-30 03:00:03
《资治通鉴》:如果你长相漂亮,那最好你脾气差;如果你工作能力强,你最好不讲理;如果你有能力,你就要难接触,原因有两个

《资治通鉴》:如果你长相漂亮,那最好你脾气差;如果你工作能力强,你最好不讲理;如果你有能力,你就要难接触,原因有两个

心理观察局
2026-08-05 06:04:07
去医院别傻坐干等叫号!老护士私下说3个窍门再也不会白熬一下午

去医院别傻坐干等叫号!老护士私下说3个窍门再也不会白熬一下午

荷兰豆爱健康
2026-08-07 00:39:06
你的身体自带顶级自愈系统,90%的人一辈子都没真正启动过

你的身体自带顶级自愈系统,90%的人一辈子都没真正启动过

青苹果sht
2026-08-01 05:11:32
知名物理学家博士学位被撤销,曾用香肠冒充恒星照片

知名物理学家博士学位被撤销,曾用香肠冒充恒星照片

化学人生
2026-08-05 22:45:53
曝巴萨与曼城达协议!5000万欧签下30岁金球先生,计划5天后到队

曝巴萨与曼城达协议!5000万欧签下30岁金球先生,计划5天后到队

我爱英超
2026-08-07 22:42:03
24岁尼科·冈萨雷斯:曼城3-1后亲承今夏不离队,转会传闻不攻自破

24岁尼科·冈萨雷斯:曼城3-1后亲承今夏不离队,转会传闻不攻自破

体育硬核说
2026-08-07 00:05:59
2026-08-08 01:44:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1380文章数 78关注度
往期回顾 全部

科技要闻

突然涨价,"只收电费钱"的梁文锋,变了吗

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

体育要闻

去年信誓旦旦3000万 今年NBA查无此人

娱乐要闻

周也热恋结束,六个字暴露单身状态

财经要闻

腾讯WorkBuddy领跑AI办公 阿里字节急了?

汽车要闻

越7全球首秀 传祺开始进攻方盒子越野

态度原创

游戏
亲子
艺术
家居
公开课

《古剑》放话冲击全球!带来中国奇谭动作RPG新体验

亲子要闻

西蒙小小班结束,在家整整折磨了我们两天。丈母娘还以为休息两天继续上课呢

艺术要闻

别人画皮他画魂,这个在修道院关了18年的男人,把每一具肉体都画成了圣像

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版