一题算法 | 字符串中的查找与替换

题目

对于某些字符串 S,我们将执行一些替换操作,用新的字母组替换原有的字母组(不一定大小相同)。
每个替换操作具有 3 个参数:起始索引 i,源字 x 和目标字 y。规则是如果 x 从原始字符串 S 中的位置 i 开始,那么我们将用 y 替换出现的 x。如果没有,我们什么都不做。

示例

输入:S = "abcd", indexes = [0,2], sources = ["a","cd"], targets = ["eee","ffff"]
输出:"eeebffff"
解释:
    "a" 从 S 中的索引 0 开始,所以它被替换为 "eee"。
    "cd" 从 S 中的索引 2 开始,所以它被替换为 "ffff"

提示

0 <= indexes.length = sources.length = targets.length <= 100
0 < indexes[i] < S.length <= 1000
给定输入中的所有字符都是小写字母

解题思路

解法一

先找出需要替换的索引replace_indexs,然后对replace_indexs进行排序,为什么需要排序呢?因为替换值和被替换值的长度不一样,这样就产生了偏移量offset,因为原indexes是无序的,偏移量影响的地方不确定,当对replace_indexs排序后,偏移量只会对后面的需要替换的字符串造成影响,在字符串截取或者替换的时候,开始坐标就变成了index+offset

解法二

将原字符串转换成char数组,每个下标对应一个标记是否需要字符串替换。遍历整个char数组,将每个值添加到新的字符串中,如果需要替换,添加的值为替换值,下标变换等于原下标+被替换字符串的长度。如果不需要替换,添加值为char数组对应下标的值,下标前移一位。

代码实现

方法一

    /**
     * 将需要替换的索引排序,因为替换的值和被替换值得长度不一样,所以在字符串截取的时候会产生偏移量,将需要替换的索引排序后,偏移量只会对后面需要替换的字符串产生影响
     *
     * @param S
     * @param indexes
     * @param sources
     * @param targets
     * @return
     */
    public static String findReplaceStringByOrderIndex(String S, int[] indexes, String[] sources, String[] targets) {
   
        StringBuilder sb = new StringBuilder(S);
        // new 一个具有排序功能的TreeMap
        Map<Integer, Integer> map = new TreeMap<Integer
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值