字符串替换
字符串的调整
替换字符串中连续出现的指定字符串
一,
字符串的替换 [倒着复制]
原问题思路:
遍历第一遍: 得到两个信息, chas 的左半区有多大, 记为 len, 左半区的空格有多少, 记为 num.
可知最终长度为 len+2*num, 替换字母为 .
从右往左遍历第二遍: 遇到字母复制到新长度最后位置, 遇到空格则加入 02%.
原问题代码:
- def changeStr(s):
- if not s:
- return s
- count = 0
- n = len(s)
- for i in range(n):
- if s[i] == ' ':
- count += 1
- m = n + count * 2
- s += '0'*(count*2)
- j = 0
- for i in range(n-1,-1,-1):
- tmp = m - j -1
- if s[i] != ' ':
- s = s[:tmp] + s[i] + s[tmp+1:]
- j += 1
- else:
- s = s[:tmp-2]+' '+s[tmp+1:]
- j += 3
- return s
- s = 'AB C DEF G'
- print(changeStr(s))
二, 移动字符 [倒着复制]
补充问题思路:
从右往左倒着复制, 遇到数字直接复制, 遇到 * 不复制, 当把所有数字复制完, 把左半区全部设置成 * 即可.
代码:
- def sortStr(s):
- if not s:
- return s
- j = 0
- n = len(s)
- for i in range(n-1,-1,-1):
- tmp = i + j
- if s[i] != '*':
- s = s[:tmp] + s[i] + s[tmp+1:]
- else:
- j += 1
- s = '*'*j + s[n-j-1:]
- return s
- s = '123**24**2*'
- print(sortStr(s))
三, 替换字符串中连续出现的指定字符串
六, 替换字符串中连续出现的指定字符串
给定三个字符串 str,from 和 to, 已知 from 字符串中无重复字符, 把 str 中所有 from 的子串全部替换成 to 字符串, 对连续出现 from 的部分要求只替换成一个 to 字符串, 返回最终的结果字符串
举例:
str="123abc",from="abc",to="4567", 返回 "1234567"
str="123",from="abc",to="456", 返回 "123"
str="123abcabc",from="abc",to="X", 返回 "123X"
思路:
先将 str 中含 from 的都替换成 0*len(from), 然后将不等于 0 的用 cur 暂存, 遇到 0 则 res + cur + to.
把 str 看作字符类型的数组, 首先把 str 中 from 部分所有位置的字符编码设为 0(即空字符), 如 "12abcabca4",from="abc", 处理后 str=['1','2',0,0,0,0,0,0,'a','4'].
具体步骤如下:
1 生成整数变量 match, 标识目前匹配到 from 字符串的什么位置, 初始时 match=0;
2 从左到右遍历 str 中每个字符, 假设当前遍历到 str[i];
3 若 str[i]==from[match], 若 match 是 from 最后一个字符的位置, 说明在 str 中发现了 from 字符串, 则从 i 位置向前的 M 个位置, 都把字符编码设为 0,M 为 from 的长度, 设置完成后令 match=0; 若 match 不是 from 最后一个字符的位置, 则 match++. 继续遍历 str 的下一个字符;
4 若 str[i]!=from[match], 说明匹配失败, 令 match=0, 即回到 from 开头重新匹配. 继续遍历 str 的下一个字符;
代码:
- def replace(s,f,to):
- if not s or f == None:
- return s
- arr = list(s)
- j = 0
- for i in range(len(s)):
- if s[i] == f[j]:
- if j == len(f)-1:
- s = s[:i-j] + '0' * len(f) + s[i+1:]
- # s[i-j+1:i+1] = '0' * len(f)
- j = 0
- else:
- j += 1
- else:
- j = 0
- res = '' cur =''
- for i in range(len(s)):
- if s[i] != '0':
- cur = cur + s[i]
- if s[i] == '0' and (i == 0 or s[i-1] != '0'):
- res = res + cur + to
- cur = ''
- if cur:
- res = res + cur
- return res
- s = '12abcabc3'
- f = 'abc'
- to = 'X'
- replace(s,f,to)
来源: http://www.bubuko.com/infodetail-2974461.html