20190118-自定义实现replace方法

1.自定义实现replace方法

Python replace() 方法把字符串中的 old(旧字符串) 替换成 neange(新字符串),如果指定第三个参数max,则替换不超过 max 次。
考虑old与nein的长度不一样的情况,如old = ‘is‘;new = ‘was‘

思路:

1.先找出字符串中old字符的index,考虑可能出现多次的情况使用一个列表replace_str_index_in_s存储old_str的index

2.使用result列表存储替换后的新的字符串,考虑result的生成方式为:

  2.1 从原有字符串的第0位开始,如果index不在replace_str_index_in_s中,则result+=s[i],然后查看i+1,i+2...

  2.2 如果index在replace_str_index_in_s中,则result+=new_str,此时需要注意的一点是新的i的位置位i+len(old_str)而非i+1

  2.3 考虑不知下一个i的值为i+1还是i+len(old_str),因此用while语句来实现

3. 考虑给定max的情况使用count来计数,当count<max的时候替换,当count>max的时候不替换

def customize_replace(s,old_str,new_str,max=None):
    result =‘‘
    #存储新的字符串
    replace_str_index_in_s =[]
    #存储old_str的index
    for i in range(len(s)):
        if s[i:i+len(old_str)]==old_str:
            replace_str_index_in_s.append(i)
    j=0
    if max==None:
        while j <len(s):
            #遍历s[j],j的值不是按序+1,因此用while循环
            if j in replace_str_index_in_s:
                result+=new_str
                j+=len(old_str)
            else:
                result+=s[j]
                j+=1
    else:
        count =0
        #统计替换次数
        while j <len(s):
            if count <max and j in replace_str_index_in_s:
                print(‘if执行‘,j,result)
                result+=new_str
                j+=len(old_str)
                count+=1
            else:
                print(‘else执行‘,j,result)
                result+=s[j]
                j+=1
    return result

Tips:有一种特殊情况如s2=‘addbbdddbbbddbb##bb#‘有3个b的情况下替换的old_str为bb的时候,因此replace_str_index_in_s里面的index可能结果为[3,8,9,13,17],但是明显第9位不会进行替换,因为此处需要用count来计数而不能写做replace_str_index_in_s[:max],这种写法的情况下会有替换次数不足max的情况,错误情况如max =3,那么replace_str_index_in_s[:3] = [3,8,9],但是第9位不会替换,因此实际替换次数为2,因此不能用这种写法

原文地址:https://www.cnblogs.com/hyj691001/p/10289520.html

时间: 2024-10-13 06:13:52

20190118-自定义实现replace方法的相关文章

C#自定义字符串替换Replace方法

前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb12345fg,即:abcdeabcdfbcdefg -> ab12345abcdfb12345fg. 显然不能用string.Replace方法,需要自定义一个方法 string Replace(string originalString, string strToBeReplaced, strin

C#自定义字符串替换Replace方法实例

本文实例讲述了C#自定义字符串替换Replace方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb12345fg,即:abcdeabcdfbcdefg -> ab12345abcdfb12345fg. 二.实现方法: 显然不能用string.Replace方法,需要自定义一个方法 strin

JavaScript 中的 replace 方法

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返回值

深入理解 JavaScript 中的 replace 方法(转)

replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符串 searchValue:字符串或正则表达式 replaceValue:字符串或者函数 字符串替换字符串 JavaScript 1 'I am loser!'.replace('loser','hero')//I am hero! 直接使用字符串能让自己从loser变成hero,但是如果有2个lo

Android应用自定义View绘制方法手册

背景 这篇迟迟难产的文章算是对2015前半年的一个交代吧,那时候有一哥们要求来一发Android Canvas相关总结,这哥们还打赏了,实在不好意思,可是这事一放就给放忘了,最近群里小伙伴催着说没更新博客,坐等更新啥的,随先有这么一篇Android应用开发超级基础的文章诞生了(因为这种文章最好写哈,就是用熟了就行).不得不说下这么久为何一直没更新博客的原因了,首先遇上了过年,我个人崇尚过节就该放下一切好好陪陪亲人,珍惜在一起的时光:其次今年开年很是蛋疼,不是不顺当就是深深的觉得被坑,所以心情也就

自定义类工厂方法

1.自定义工厂方法 什么是工厂方法(快速创建方法) 类工厂方法是一种用于分配.初始化实例并返回一个它自己的实例的类方法.类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new 自定义类工厂方法的规范 (1)一定是+号开头 (2)返回值一般是instancetype类型 (3)方法名称以类名开头,首字母小写 示例 + (id)person; + (id)person { return [[Person alloc]init]; } + (id)personWit

Fragment加载替换add,show,hide,replace方法

使用replace方法把原有的Fragment替换掉: 使用hide和show方法,把已经添加过的Fragment再次显示出来. 使用replace(R.id.layout,B)即可以.但是这带来一个问题,原来A会在被replace后被销毁,会调用其生命周期函数(onDestoryView(),onPause(),onDestory()). 如果频繁地replace Fragment会不断创建新实例,销毁旧的,无法重用. 多次切换,会导致Fragment上的View无法加载的问题(onCreat

iOS开发中自定义字体的方法

http://www.cnblogs.com/iyou/archive/2014/05/25/3751669.html 1. 首先下载你想要设置的字体库,例如设置方正启体简体 2. 添加到工程,一定要注意勾选红色框框处,默认是不勾选的  添加以后 3.在plist文件中添加 4.现在已经添加成功了,但是要使用就必须知道FontName,用以下代码可查到 NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyName

Javascript 中创建自定义对象的方法(设计模式)

Javascript 中创建对象,可以有很多种方法. Object构造函数/对象字面量: 抛开设计模式不谈,使用最基本的方法,就是先调用Object构造函数创建一个对象,然后给对象添加属性. 1 var student = new Object(); 2 student.name = "xiao ming"; 3 student.age = 20; 4 student.getName = function () { 5 alert(this.name); 6 } 熟悉javascrip