字符串解码DecodeString
字符串解码
原创博客,转载请注明出处!
eg:
ss=2[abc]3[cd]ef return:abcabccdcdcdef
ss=3[a2[c]]2[a] return:accaccaccaa
ss=10[abc]3[cd]ef return:abcabcabcabcabcabcabcabcabcabccdcdcdef
如何实现前面例子的效果呢?
首先分析s='2[abc]',要得到字符串'abcabc'非常容易
In [102]: int(s[0])*s[2:5]
Out[102]: 'abcabc'
其中,s[2:5]中的2代表‘[’之后的位置,5代表‘]’的位置,那么我就有启发了,如果我能得到‘[]’之间的内容以及‘[’前面的数字,就可以完成一个中括号之间的字符串相乘了。
1、首先找到第一个匹配的中括号[],可以遍历整个字符串。找到一个‘[’就用index_1记录下来,继续遍历,当下一个'['出现的时候,index_1的值会更新,直到找到‘]’记录位置index_2,此时的‘index_1和index_2就是要找的第一个'[]'。
2、获取index_1到index_2的内容
3、获取index_1前面的数字,注意数字可能是很多位数。从index_1的前一个开始遍历,如果是数字就加入字符串num里面,注意要加在字符串的前面,直到第一个非数字出现,则跳出for循环。
具体代码如下:
def onestr(ss):
for i in range(len(ss)):
if ss[i] == '[':
index_1=i #记录方括号开始的位置
#print(index_1)
if ss[i]==']':
index_2=i #记录方括号结束的位置
temp=ss[index_1:index_2+1] #取出方括号开始以及结束的位置
#取出方括号[前面的数字,由于数字可能为多位,所以用while循环实现
num=''
j=1
while(1):
#从[的前一个位置开始找,直到不是数字为止
if ss[index_1-j].isdigit():
num=ss[index_1-j]+num #num为字符串类型
j=j+1
continue
else:
break
break
return temp,num
onestr('2[abc]3[cd]ef')
一次操作的结果为:
temp,num='[abc]','2'
将abc和2相乘的结果,替换掉源字符串2[abc]
ss=ss.replace(num+str_temp,int(num)*str_temp.lstrip('[').rstrip(']'))
由于temp='[abc]',直接相乘会把[]符号也乘进去,因此需要去掉两边的符号。
ss=abcabc3[cd]ef
一个方括号需要一次相乘,n个方括号就需要n次相乘,因此一个while循环,循环条件为方括号的个数,即可实现整个字符串的替换。
ss=input()
print(ss)
i=0
N=ss.count('[')
while(i<N):
str_temp,num=onestr(ss) ss=ss.replace(num+str_temp,int(num)*str_temp.lstrip('[').rstrip(']')) i=i+1
print(ss)
程序代码:
def onestr(ss):
for i in range(len(ss)):
if ss[i] == '[':
index_1=i #记录方括号开始的位置
if ss[i]==']':
index_2=i #记录方括号结束的位置
temp=ss[index_1:index_2+1] #取出方括号开始以及结束的位置
num=''
j=1
while(1):
if ss[index_1-j].isdigit(): #从[的前一个位置开始找,直到不是数字为止
num=ss[index_1-j]+num #num为字符串类型
j=j+1
continue
else:
break
break
return temp,num
ss=input()
print(ss)
i=0
N=ss.count('[')
while(i<N):
str_temp,num=onestr(ss)
ss=ss.replace(num+str_temp,int(num)*str_temp.lstrip('[').rstrip(']'))
i=i+1
print(ss)
字符串解码DecodeString的更多相关文章
- LeetCode 394. 字符串解码(Decode String) 44
394. 字符串解码 394. Decode String 题目描述 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 enco ...
- Java实现 LeetCode 394 字符串解码
394. 字符串解码 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k ...
- [PHP]对Json字符串解码返回NULL的一般解决方案
---------------------------------------------------------------------------------------------------- ...
- unicode字符串解码显示
# encoding: utf-8 ''' unicode字符串解码显示 ''' import sys reload(sys) sys.setdefaultencoding('utf-8') a = ...
- [Swift]LeetCode394. 字符串解码 | Decode String
Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string], where ...
- [Leetcode]394.字符串解码
题目与解释 给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正 ...
- Q394 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. 你可 ...
- 394 Decode String 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串.编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数.你可以认 ...
- LeetCode 394:字符串解码 Decode String
题目: 给定一个经过编码的字符串,返回它解码后的字符串. Given an encoded string, return its decoded string. 编码规则为: k[encoded_st ...
随机推荐
- 201521123015 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- Markdown 模板
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...
- Spring4 customEditors
Spring4.0版本以后customEditors属性为Map<Class<?>, Class<? extends PropertyEditor>>,所以用key ...
- flex布局常用属性
最近喜欢flex布局,它可以完美的实现响应式布局,下边我总结了它的一些常用属性,喜欢的,也可以练习写一下,很好用~~~ 注意:使用了flex布局,对于子元素的float.clear和vertical- ...
- Cross the GreateWall方案
涉及Client端和Server端 服务端:SS搭建 注意:以Ubuntu环境为例 Step1:添加GPG Public key wget -O- http://shadowsocks.org/deb ...
- 【个人笔记】《知了堂》mysql表连接
为什么使用表连接 什么是表连接? 如果数据来自多个表,那么可以采用链接查询的方式来实现.因此表连接就是多个表连接合在一起实现查询效果 表连接的原理 表连接采用的是笛卡尔乘积,称之为横向连接. 笛卡尔乘 ...
- Redis常见的应用场景解析
Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. Redis特性 一个产品的使用场 ...
- 进入css3动画世界(一)
其实我做css3动画也没有多久,这篇文章目标人群是css3动画的新手,不喜勿喷. 分类 目前我接触到的css3动画有2类:一种是transition的,另一种是@keyframes的. 两者的区别就是 ...
- 用es6的class关键字定义一个类
es6新增class关键字使用方法详解. 通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法 ...
- 剑指offer(纪念版)读书笔记【实时更新】
C++ 1.STL的vector每次扩充容量,新容量是前一次的两倍. 2.32位机指针大小为4个字节,64位机指针大小为8个字节. 3.当数组作为函数参数传递时,数组会自动退化成同类型指针. 4. & ...