【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 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...
随机推荐
- javascript内置对象的innerText、innerHTML、join方法的认识
innerText语法规范:HTMLElement.innerText = string ;//后面的赋值是一个字符串形式 innerText是一个非标准形式,不识别HTML标签 返回值会去除空格和换 ...
- 069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求
069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求 本文知识点:综合案例-数组移位-案例需求 说明:因为时间紧张,本人写博客 ...
- Java知识系统回顾整理01基础03变量08表达式
一.以 ; 结尾的一段代码,即为一个表达式 表达式是由变量.操作符以及方法调用所构成的结构.如下所示: int i = 5; System.out.println(5); 都是表达式 public c ...
- 总线SPI的Arduino库函数
来源参考:https://www.cnblogs.com/MyAutomation/p/9348480.html 总线SPI的Arduino库函数 SPI基本知识 SPI:高速同步串行口.是一种标准的 ...
- 上帝视角一文理解JavaScript原型和原型链
本文呆鹅原创,原文地址:https://juejin.im/user/307518987058686/posts 前言 本文将从上帝角度讲解JS的世界,在这个过程中,大家就能完全理解JS的原型和原型链 ...
- select函数详解(转)
Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv或recvfrom这样的阻塞 ...
- 写了多年代码,你会 StackOverflow 吗
写了多年代码,你会 StackOverflow 吗 Intro 准备写一个傻逼代码的系列文章,怎么写 StackOverflow 的代码,怎么写死锁代码,怎么写一个把 CPU 跑满,怎么写一个 Out ...
- day31 Pyhton 面向对象的基础 三大特性
一.内容回顾 封装 1.概念 笔记 2.__名字 在类的外部就不能用了 3.私有化的 不能被子类继承,也不能在其他任何类中调用 三个装饰器方法(装饰类中的方法) 1.不被修饰的 普通方法,会使用对象 ...
- 如何设计一个牛逼的API接口
在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...
- MySQL数据库规范 (设计规范+设计规范+操作规范)
I 文档定义 1.1 编写目的 为了在软件生命周期内规范数据库相关的需求分析.设计.开发.测试.运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性. ...