美文网首页算法
[每日一题]833. 字符串中的查找与替换

[每日一题]833. 字符串中的查找与替换

作者: 红与树 | 来源:发表于2023-08-14 11:48 被阅读0次

题目

LeetCode每日一题,参考833. 字符串中的查找与替换,难度分1461。

解题思路

  • 排序+模拟:因为替换后会影响字符串下标的改变,先排序后按顺序替换并记录下一个开始的位置即可模拟替换过程。

排序+模拟

class Solution {
    public String findReplaceString(String s, int[] indices, String[] sources, String[] targets) {
        //不重叠 直接按顺序替换
        int k = indices.length;
        //按照ids顺序访问indices就是下表从小到大开始替换
        Integer[] ids = new Integer[k];
        for(int i = 0; i < k; i++) ids[i] = i;
        Arrays.sort(ids,(a,b)->indices[a]-indices[b]);
        //按顺序替换
        StringBuilder ans = new StringBuilder();
        char[] cs = s.toCharArray();
        int pre = 0;//上次替换后结束下标
        for(int i = 0; i < k; i++) {
            int idx = ids[i], j = indices[idx]; //j访问下标
            //先把下标j前面不替换的放到结果ans里
            if(j > pre) ans.append(s.substring(pre,j));
            //判断是否要替换
            if(check(cs,sources[idx].toCharArray(),j)) {
                ans.append(targets[idx]);
                pre = j + sources[idx].length();
            }else {
                pre = j;
            }
        }
        if(pre < s.length()) ans.append(s.substring(pre));
        return ans.toString();
    }

    boolean check(char[] s, char[] source, int pos){
        if(s.length < pos + source.length) return false;
        for(int i = 0; i < source.length; i++) {
            if(s[pos+i] != source[i]) return false;
        }
        return true;
    }
}

复杂度分析

  • 时间复杂度:O(k+klogk+n)k为尝试替换数组长度,排序klogkn为字符串长度。
  • 空间复杂度:O(k+logk),排序数组k,排序栈空间logk

2023.08.15

相关文章

  • 833. 字符串中的查找与替换[leetcode]

    对于某些字符串 S,我们将执行一些替换操作,用新的字母组替换原有的字母组(不一定大小相同)。 每个替换操作具有 3...

  • vim 替换

    查找与替换:s(substitute)命令用来查找和替换字符串。语法如下: 例如:%s/foo/bar/g会在全局...

  • Linux vim命令

    vim 命令 在 Vim 中优雅地查找和替换 :s(substitute)命令用来查找和替换字符串。语法如下 ^E...

  • 【2017-08-23】字符串及文本的处理(二)

    字符串的搜索与替换 匹配或搜索特定模式的文本字符串方法str.find(substr) 主要为查找字符串中是否出...

  • Python之字符串操作

    字符串截取 字符串替换-replace 字符串分割-split 字符串查找-find 字符串查找-index

  • 用GREP查找或替换多个文件中的字符串

    查找多个XML文件中的‘Hello World’ 查找并替换多个文件中的字符串 其中,-r 表示递归,-l 表...

  • 字符串的方法

    长度计算 连接 字符串截取 查找、替换与匹配 大小写 字符串与数组的转换 var str = 'hello';va...

  • 查找&替换

    今日学习查找与替换的用法 基本用法 CTRL+F查找 CTRL+H替换 进阶用法 查找/替换整个工作薄中某一内容,...

  • IDEA常用快捷键

    一,搜索 1,在当前文件中查找——Ctrl+F 2,替换字符串——Ctrl+R 3,在全局文件中查找字符串——Ct...

  • linux-对文件某个字符串替换,批量替换

    全部替换:sed -i 's/查找的字符串/替换的字符串/g' 文件 替换每行第一次出现的字符串:sed -i '...

网友评论

    本文标题:[每日一题]833. 字符串中的查找与替换

    本文链接:https://www.haomeiwen.com/subject/cpxcmdtx.html