原题:

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. 【题解】CF1228D Complete Tripartite

    Link 题目大意:给定一个无向图,将它划分为三个点集,要求在一个点集中的点没有边相连,且颜色相同,不同集合中的点互相有边相连. \(\text{Solution:}\) 我们发现,与一个点之间没有边 ...

  2. 从远程库github.com克隆代码时遇到了如下的问题:

    Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hos ...

  3. 在实际开发中Java中enum的用法

    在日常项目的开发中,往往会存在一些固定的值,而且"数据集"中的元素是有限的. 例如:st_code// 一些状态机制:01-激活  02-未激活  03 -注册..等等 还有一特性 ...

  4. 实现base64的编码解码,深刻理解base64

    上代码 #include<stdio.h> #include<string.h> #include<stdlib.h> const char padding = ' ...

  5. 第十二章 配置vlan

    一.vlan技术简介 1.广播风暴 广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了"广播 ...

  6. JAVA递归实现线索化二叉树

    JAVA递归实现线索化二叉树 基础理论 首先,二叉树递归遍历分为先序遍历.中序遍历和后序遍历. 先序遍历为:根节点+左子树+右子树 中序遍历为:左子树+根节点+右子树 后序遍历为:左子树+右子树+根节 ...

  7. spring-shiro 安全框架配置

    <!--创建自定义域对象--><bean id="authRealm" class="com.aaa.ssm.shiro.AuthRealm" ...

  8. Vue 路由切换时页面内容刷新页面并更新数据

    第二次进入页面,页面路由参数已经改变,但是页面内容不会刷新 <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM <keep-aliv ...

  9. js中!!的运用

    最近在看vue源码. 里面使用Object.defineProperty()中!!吸引眼球 1 export function def (obj: Object, key: string, val: ...

  10. JUC---04Lock(二)ReentrantReadWriteLock

    1.读写锁 分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可.如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁:如果你的代码修改数据,只能 ...