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的时候不替换

  1. def customize_replace(s,old_str,new_str,max=None):
  2. result =''
  3. #存储新的字符串
  4. replace_str_index_in_s =[]
  5. #存储old_str的index
  6. for i in range(len(s)):
  7. if s[i:i+len(old_str)]==old_str:
  8. replace_str_index_in_s.append(i)
  9. j=0
  10. if max==None:
  11. while j <len(s):
  12. #遍历s[j],j的值不是按序+1,因此用while循环
  13. if j in replace_str_index_in_s:
  14. result+=new_str
  15. j+=len(old_str)
  16. else:
  17. result+=s[j]
  18. j+=1
  19. else:
  20. count =0
  21. #统计替换次数
  22. while j <len(s):
  23. if count <max and j in replace_str_index_in_s:
  24. print('if执行',j,result)
  25. result+=new_str
  26. j+=len(old_str)
  27. count+=1
  28. else:
  29. print('else执行',j,result)
  30. result+=s[j]
  31. j+=1
  32. 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,因此不能用这种写法

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

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

    前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb1 ...

  2. JavaScript 中的 replace 方法

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...

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

    replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...

  4. Fragment 源码解析add()和replace()方法

    1.有问题的代码: MainActivity public class MainActivity extends AppCompatActivity implements View.OnClickLi ...

  5. 使用js在HTML中自定义字符串格式化方法

    Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...

  6. javaScript prototype实例(正则) 自定义日期格式化方法

    一个JS自定义日期格式化方法,包括了不少知识点,以下方法来自jQuery DataTable中文的官方参考 //return (new Date(data)).Format("yyyy-MM ...

  7. JavaScript replace() 方法

    参考:http://www.w3school.com.cn/jsref/jsref_replace.asp 需要有一点注意的是:可以是函数的形式做为返回值,如下: "test{0}" ...

  8. 关于replace()方法中第二个参数的转义问题

    如果你想通过Javascript代码在网页中呈现 \ 字符,则在JS代码中你必须输入两个反斜杠 \\,否则会报错.比如: var a = "\"; alert(a); //chro ...

  9. 字符串的replace()方法隐藏着什么不可告人秘密?

    最近在做JS算法项目时发现一个令我匪夷所思的问题, 这里想记录一下问题. 首先介绍一下字符串replace()方法的基本用法. replace() 方法使用一个替换值(replacement)替换掉一 ...

随机推荐

  1. 使用webBrowser下载文件

    如果直接用webBrowser.Navigate("http://***.com/");会弹出文件下载的对话框. 而如果用webclient.UploadData()下载,对方网站 ...

  2. shell单引号双引号详解

    linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了) " "(双引号)与 ' '(单引号)的区别    你在shell prompt(shell 提示)后面敲 ...

  3. laravel5.5 自定义验证规则——手机验证RULE

    相信很多小伙伴和我一样烦恼,laravel没有自带手机号的验证,每次验证手机号都要写正则这类的规则,每次都是repeat yourself!违背了编码的一个原则,就是Don't repeat your ...

  4. 设计模式:访问者(Visitor)模式

    设计模式:访问者(Visitor)模式 一.前言    什么叫做访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+ ...

  5. 全文检索之solr学习

    solr下载: http://www.apache.org/dyn/closer.lua/lucene/solr/7.3.1 学习教程 除了官网的教程,一切教程都是可以有错误的. https://lu ...

  6. Android MVP 简析

    原地址:https://segmentfault.com/a/1190000003927200 在Android中应用MVP模式的原因与方法的简析,写的简单易懂.

  7. 记录两篇关于linux设置ssh登录 和NAT网络模式下访问

    https://blog.csdn.net/java_dotar_01/article/details/76942563 https://blog.csdn.net/jiuduan2009/artic ...

  8. JAVA串口开发帮助类分享-及写在马年末

    摘要: 在系统集成开发过程中,存在着各式的传输途径,其中串口经常因其安全性高获得了数据安全传输的重用,通过串口传输可以从硬件上保证数据传输的单向性,这是其它介质所不具备的物理条件.下面我就串口java ...

  9. IBM websphere MQ远程队列的简单配置

    原理: 1.远程队列分发送方和接收方 2.接收方配置: 接收方配置要先拿到对方的发送通道配置,接收方的队列名称必须和远程发送方的队列名称一致,告诉远程发送方,你的地址,队列管理器名称等信息,在通道中建 ...

  10. json查看器

    jsonview: http://www.bejson.com/jsonviewernew/