【Kata Daily 190903】String incrementer(字符串增量器)
原题:
Your job is to write a function which increments a string, to create a new string.
- If the string already ends with a number, the number should be incremented by 1.
- If the string does not end with a number. the number 1 should be appended to the new string.
Examples:
foo -> foo1
foobar23 -> foobar24
foo0042 -> foo0043
foo9 -> foo10
foo099 -> foo100
Attention: If the number has leading zeros the amount of digits should be considered.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
谷歌翻译:
您的工作是编写一个增加字符串的函数,以创建一个新字符串。
- 如果字符串已经以数字结尾,则该数字应增加1。
- 如果字符串没有以数字结尾。数字1应该附加到新字符串。
例子:
foo -> foo1
foobar23 -> foobar24
foo0042 -> foo0043
foo9 -> foo10
foo099 -> foo100
注意:如果数字有前导零,则应考虑数字位数
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
个人解决思路:
从字符串的末尾开始,遇到数字就继续遍历,遇到非数字就停止。将数字部分加1,再和没有遍历到的组合。最后考虑特殊情况。
def increment_string(strng):
L = []
global strng1
strng1 = ""
if len(strng)==0:#特殊情况,处理strng为空时
strng = "1"
else:
if not strng[-1].isdigit():#特殊情况,处理最后一位不是数字时
strng = strng + "1"
else:
for i in reversed(strng):#反向遍历
if i.isdigit():
L.append(i)
else:
strng1 = strng[0:-len(L)]#切片
break
s1 = "".join(reversed(L))#列表转化为字符串
s2 = str(int(s1)+1).zfill(len(L))#zfill是自动补零
strng = strng1 + s2
return strng
优质解答:
def increment_string(strng):
head = strng.rstrip('0123456789')#获取左边非数字部分
tail = strng[len(head):]#获取右边剩下的一部分
if tail == "": return strng+"1"
return head + str(int(tail) + 1).zfill(len(tail))
知识点:
len(s):
返回对象(字符、列表、元组等)长度或项目个数。
切片:
L[开始索引, 结束索引, 相隔取数],默认相隔取数为1。取值不含结束索引
L = list(range(10))
L1 = L[0:3]#从索引0开始取到索引3为止,不包含3
#运行结果:[0, 1, 2] L2 = L[:3]#也是从索引0开始,同L1
#运行结果:[0, 1, 2] L3 = L[:]#复制一个一样的列表
#运行结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] L4 = L[0:6:2]#从索引0到索引6,没隔两个数取一个
#运行结果:[0, 2, 4] L5 = L[::-1]#倒序取出全部的元素 L6 = L[:-1]#从索引0开始取到倒数第一个,不含倒数第一个
#运行结果:[0, 1, 2, 3, 4, 5, 6, 7, 8]
判断字符串类型:
1、str.isdigit():判断str是否是数字,返回布尔类型
2、str.isalpha():判断str是否是字母,返回布尔类型
3、str.isalnum():判断str是否是字母或数字的组合,返回布尔类型
reversed(L):
反向遍历,不作用于原来的list
字符串和列表转换:
1、字符串转列表:
str.split("参数")#参数一般为空格
2、列表转字符串:
"参数".join(L)#参数一般为空格
自动补零str.zfill(len):
zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
去除头尾符号函数:
1、str.lstrip(str chars):根据参数值去除左边的符号
2、str.rstrip(str chars):根据参数值去除右边的符号
3、str.strip(str chars):根据参数值去除左右两边的符号
【Kata Daily 190903】String incrementer(字符串增量器)的更多相关文章
- (PHP)redis String(字符串)操作
/** * * String操作 * 字符串操作 * */ //设置键值:成功返回true,否则返回false,键值不存在则新建,否则覆盖 $redis->set('string', 'hell ...
- java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换
java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换 一.字符串与其他类型连接 public class DemoString{ public static void mai ...
- .NET面试题解析(03)-string与字符串操作
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...
- [CareerCup] 1.2 Reverse String 翻转字符串
1.2 Implement a function void reverse(char *str) in C or C++ which reverses a null-terminated string ...
- char型字符串(数组)与string型字符串 指针与引用
一.常指针: int *const p; //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p; //指针可以改变,但是指针指向的数据不可以改变. 指 ...
- Java基础知识强化59:String(字符串)和其他类型的相互转化
1. String类型 ---> 其他类型 (1)使用基本类型包装类的parseXXX方法 e.g:String(字符串)转化为int(整型) String MyNumber ="12 ...
- String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)
学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...
- JavaScript String(字符串对象)
String 对字符串的支持 String.charAt( n ) 返回字符串中的第n个字符 n 是下标 String.charCodeAt( ) 返回字符串中的第n个字符的代码 String.con ...
- String:字符串常量池
String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...
随机推荐
- Java知识系统回顾整理01基础03变量01变量定义
定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...
- 01 Arcgis10.6 安装教程
一.ArcGIS系统要求 包括: Win7 SP1(及以上) 32/64位系统 Win8.1 32/64位系统 Win10 32/64位系统 二.下载ArcGIS 10.6安装文件 链接:https: ...
- MySQL数据库入侵及防御方法
来自:http://blog.51cto.com/simeon/1981572 作者介绍 陈小兵,高级工程师,具有丰富的信息系统项目经验及18年以上网络安全经验,现主要从事网络安全及数据库技术研究工作 ...
- 下载、安装 PL/SQL Developer
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- P3469 BLO-Blockade (缩点)
又可以水紫题了,好开心 前置芝士 无向图割点,然后脑子... 不会的童鞋,出门右转,百度百科...QAQ 首先,对于这道题,我们要求的是,割去每个点及他所连的边后,无向图中,有多少有序点对(\(x\) ...
- tu
1 第五章 图 2 //结构定义 3 #define MaxVertexNum 100 //图中顶点数目的最大值 4 typedef struct ArcNode{ //边表节点 5 int adjv ...
- LVS搭建
LVS集群搭建 NAT架构图 1.在RS188,RS189操作 #安装httpd服务[root@t1 ~]# yum install -y httpd[root@t1 ~]# echo "I ...
- 【git】关联本地仓库与远程仓库
1.在远程建立一个空项目[项目名称]2.git init3.git remote add origin [git 地址]4.git pull origin master5.git push origi ...
- linux启动过程中建立临时页表
intel的x86这种架构为了兼容以前同系列的架构有一些很繁琐无用的东西.比如分段和分页两种机制都可以实现隔离进程的内存空间,在x86上两种机制都有,用起来比较繁琐.所以linux内核在启动的时候通过 ...
- 【不知道怎么分类】HDU - 5963 朋友
题目内容 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始 ...