【(格式化字符串)】

继续「快刷四部曲」5 分钟速刷 315 题(格式化字符串)。

核心一句话:按 sublen 切分后,把相邻的奇-偶对(第 2k-1 与 2k 块)互换即可


① 抽象模型

  • 已知 sublen 之和必等于 str.length(),无需校验。
  • 把 str 拆成若干段,每段长度由 sublen[i] 决定。
  • 对调规则:
    块 0 ↔ 块 1
    块 2 ↔ 块 3
    ...
    最后若剩奇数块,则最后一块不动。

② 最优算法

时间 O(n):只扫一遍。

空间 O(n):新建 char[] 保存结果,避免大量 substring。

算法:

  1. 用双指针:srcPos 指向原串当前段首,dstPos 指向新串当前写入位置。
  2. 步长 2 遍历 sublen 数组:
    • 先记下第 i 段长度 L1 = sublen[i]
    • 若 i+1 存在,记下 L2 = sublen[i+1]
    • 先把原串 [srcPos+L1, srcPos+L1+L2) 这段(即第 i+1 块)拷到新串 dstPos 处,dstPos += L2
    • 再把原串 [srcPos, srcPos+L1) 这段(即第 i 块)拷到新串 dstPos 处,dstPos += L1
    • srcPos += L1 + L2
  3. 最后若 sublen 长度为奇数,把最后一块直接拷完即可。

③ 边界/异常

  • sublen 长度为 0 已隐含不可能(题目保证和为 str.length() 且 ≥1)。
  • 空串 ⇒ 返回空串。

④ 代码(Java,可直接粘 LintCode)

java 复制代码
public String formatString(String str, int[] sublen) {
    int n = str.length();
    char[] s = str.toCharArray();
    char[] ans = new char[n];
    int srcPos = 0, dstPos = 0;
    for (int i = 0; i < sublen.length; i += 2) {
        int L1 = sublen[i];
        int L2 = (i + 1 < sublen.length) ? sublen[i + 1] : 0;
        // 先写第二段
        if (L2 > 0) {
            System.arraycopy(s, srcPos + L1, ans, dstPos, L2);
            dstPos += L2;
        }
        // 再写第一段
        System.arraycopy(s, srcPos, ans, dstPos, L1);
        dstPos += L1;
        srcPos += L1 + L2;
    }
    return new String(ans);
}

复杂度:

时间 O(n),空间 O(n)。

写完,Submit,一遍 AC。

相关推荐
老鼠只爱大米1 天前
LeetCode经典算法面试题 #114:二叉树展开为链表(递归、迭代、Morris等多种实现方案详细解析)
算法·leetcode·二叉树·原地算法·morris遍历·二叉树展开
Ivanqhz1 天前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
HyperAI超神经1 天前
覆盖天体物理/地球科学/流变学/声学等19种场景,Polymathic AI构建1.3B模型实现精确连续介质仿真
人工智能·深度学习·学习·算法·机器学习·ai编程·vllm
执着2591 天前
力扣hot100 - 144、二叉树的前序遍历
数据结构·算法·leetcode
范纹杉想快点毕业1 天前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
近津薪荼1 天前
递归专题(4)——两两交换链表中的节点
数据结构·c++·学习·算法·链表
2501_940315261 天前
【无标题】2390:从字符串中移除*
java·开发语言·算法
乐观勇敢坚强的老彭1 天前
c++寒假营day01下午
c++·算法
散峰而望1 天前
【算法竞赛】树
java·数据结构·c++·算法·leetcode·贪心算法·推荐算法
鱼很腾apoc1 天前
【实战篇】 第14期 算法竞赛_数据结构超详解(下)
c语言·开发语言·数据结构·学习·算法·青少年编程