原题:

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(字符串增量器)的更多相关文章

  1. (PHP)redis String(字符串)操作

    /** * * String操作 * 字符串操作 * */ //设置键值:成功返回true,否则返回false,键值不存在则新建,否则覆盖 $redis->set('string', 'hell ...

  2. java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换

    java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换 一.字符串与其他类型连接 public class DemoString{ public static void mai ...

  3. .NET面试题解析(03)-string与字符串操作

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...

  4. [CareerCup] 1.2 Reverse String 翻转字符串

    1.2 Implement a function void reverse(char *str) in C or C++ which reverses a null-terminated string ...

  5. char型字符串(数组)与string型字符串 指针与引用

    一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指 ...

  6. Java基础知识强化59:String(字符串)和其他类型的相互转化

    1. String类型 ---> 其他类型 (1)使用基本类型包装类的parseXXX方法 e.g:String(字符串)转化为int(整型) String MyNumber ="12 ...

  7. String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)

    学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...

  8. JavaScript String(字符串对象)

    String 对字符串的支持 String.charAt( n ) 返回字符串中的第n个字符 n 是下标 String.charCodeAt( ) 返回字符串中的第n个字符的代码 String.con ...

  9. String:字符串常量池

    String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...

随机推荐

  1. Java知识系统回顾整理01基础03变量01变量定义

    定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...

  2. 01 Arcgis10.6 安装教程

    一.ArcGIS系统要求 包括: Win7 SP1(及以上) 32/64位系统 Win8.1 32/64位系统 Win10 32/64位系统 二.下载ArcGIS 10.6安装文件 链接:https: ...

  3. MySQL数据库入侵及防御方法

    来自:http://blog.51cto.com/simeon/1981572 作者介绍 陈小兵,高级工程师,具有丰富的信息系统项目经验及18年以上网络安全经验,现主要从事网络安全及数据库技术研究工作 ...

  4. 下载、安装 PL/SQL Developer

    操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...

  5. P3469 BLO-Blockade (缩点)

    又可以水紫题了,好开心 前置芝士 无向图割点,然后脑子... 不会的童鞋,出门右转,百度百科...QAQ 首先,对于这道题,我们要求的是,割去每个点及他所连的边后,无向图中,有多少有序点对(\(x\) ...

  6. tu

    1 第五章 图 2 //结构定义 3 #define MaxVertexNum 100 //图中顶点数目的最大值 4 typedef struct ArcNode{ //边表节点 5 int adjv ...

  7. LVS搭建

    LVS集群搭建 NAT架构图 1.在RS188,RS189操作 #安装httpd服务[root@t1 ~]# yum install -y httpd[root@t1 ~]# echo "I ...

  8. 【git】关联本地仓库与远程仓库

    1.在远程建立一个空项目[项目名称]2.git init3.git remote add origin [git 地址]4.git pull origin master5.git push origi ...

  9. linux启动过程中建立临时页表

    intel的x86这种架构为了兼容以前同系列的架构有一些很繁琐无用的东西.比如分段和分页两种机制都可以实现隔离进程的内存空间,在x86上两种机制都有,用起来比较繁琐.所以linux内核在启动的时候通过 ...

  10. 【不知道怎么分类】HDU - 5963 朋友

    题目内容 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始 ...