833. 字符串中的查找与替换

本文介绍了一种字符串查找与替换的算法实现,通过排序和优先队列处理多个替换操作,确保了替换过程的正确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

833. 字符串中的查找与替换

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

每个替换操作具有 3 个参数:起始索引 i,源字 x 和目标字 y。规则是如果 x 从原始字符串 S 中的位置 i 开始,那么我们将用 y 替换出现的 x。如果没有,我们什么都不做。

举个例子,如果我们有 S = “abcd” 并且我们有一些替换操作 i = 2,x = “cd”,y = “ffff”,那么因为 “cd” 从原始字符串 S 中的位置 2 开始,我们将用 “ffff” 替换它。

再来看 S = “abcd” 上的另一个例子,如果我们有替换操作 i = 0,x = “ab”,y = “eee”,以及另一个替换操作 i = 2,x = “ec”,y = “ffff”,那么第二个操作将不执行任何操作,因为原始字符串中 S[2] = 'c',与 x[0] = 'e' 不匹配。

所有这些操作同时发生。保证在替换时不会有任何重叠: S = "abc", indexes = [0, 1], sources = ["ab","bc"] 不是有效的测试用例。

思路:对indexes进行排序,保证sources和targets数组中的字符串相对位置边,然后从后往前替换

class Node implements Comparable<Node>{
    String source;
    String target;
    int index;
    public Node(int index,String source,String target) {
        // TODO Auto-generated constructor stub
        this.index = index;
        this.source = source;
        this.target = target;
    }
    @Override
    public int compareTo(Node o) {
        // TODO Auto-generated method stub
        return o.index - this.index;
    }
}
public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) {
    PriorityQueue<Node> pQueue = new PriorityQueue<Node>();
    for(int i = 0;i < indexes.length;i++) {
        Node node = new Node(indexes[i],sources[i],targets[i]);
        pQueue.add(node);
    }
    StringBuilder sb = new StringBuilder(S);
    while (!pQueue.isEmpty()) {
        Node node = pQueue.poll();
        if(S.startsWith(node.source,node.index)) {
            sb.delete(node.index, node.index + node.source.length());
            sb.insert(node.index, node.target);
        }
    }		
    return sb.toString();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值