leetcode AC1 感受
在网上第一个AC还是蛮高兴的,之前试了不少练习编程的方法,感觉不怎么适合自己,在OJ上做题的确是一个能够锻炼的方法。 之前一直研究学习的方法,往简单的说是认知、练习,往复杂的说是,保持足够input,input内容足够narrow,难度适合,逐渐+i ,总结并输出。
不过第一次成功很高兴,leetcode不愧是入门级,适合没怎么自己写过代码的人练手。
题目:地址:https://oj.leetcode.com/problems/reverse-words-in-a-string/
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
class Solution:
# @return a string
def reverseWords(self, s):
#s = raw_input("input string \n")
#s = "a blue sky"
s = s.strip() #clean the space in head and end
#print s
b = [] # save localtion of space
a = ''
i = 0 # index
for j in s :
if s[i] == " ":
b.append(i)
i = i + 1
if b == []: #only one word
return s
#print b
#print len(b)
#print s[:2]+s[2:6]+s[6:]
i = 0
for j in b[len(b)::-1]:
# print j,
# print i
if i == 0: #the last word (begin)
a=s[j+1:].strip()
#print a
elif j ==b[0]: #the first word (end)
a = a.strip() +" "+s[j+1:i].strip()# +" " + s[:j].strip()
a = a.strip() + " "+ s[:j].strip()
#print a
else:
a = a.strip() +" " +s[j+1:i].strip()
#print a
if len(b) == 1: #only one space
a = s[j+1:]+ " "+ s[:j]
#print a
i = j
# print j,i
return a
代码写的丑的很,其实本身内容比较好实现,但是由于不熟悉oj且不了解python,故写的磕磕巴巴,甚至内容感觉就不怎么符合软件工程的易读性,写下来以免将来忘掉。
我的想法就是,1、记录原字符串的空格的位置;2、以空格位置为索引倒着输出s
先说收获:
1、略微熟悉了python的循环的运作,有时候感觉还是挺难用的,脑海还是有c的想法,这个无所谓吧,语言特性这个玩意现在还没有功夫去研究
2、 str 和 list 都可以进行切片,s[i:j] 是表示的从i到j,但是s[j]并不包括在里面
s1[0:5:2] # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)
s1[2:0:-1] #从下标2到下标1
从上面可以看到,在范围引用的时候,如果写明上限,那么这个上限本身不包括在内。
尾部元素引用
s1[-1] # 序列最后一个元素
s1[-0] # 就是s1[0]
+ 连接字符串;相邻的两个字符串文本自动连接在一起 'str' 'ing' # 'string' ; str.strip()可以把字符串头和尾的多余空格删掉
再说教训:
1、对python和oj本身不熟悉
2、考虑边界情况很少
3、变量命名非常随意,以后肯定会看不懂
4、if 和elsif 是不能同时运作的
5、循环只有一遍的时候,出现了问题,不得不加上最后的if,算不算是另一种边间没考虑好?(分别是:输入内容本身的复杂、循环的边界问题)
最后说感受:
估计是看python代码太少,现在对于编程也不能说是一种入门的感觉
参考:
http://www.pyth(去掉)ontab.com/html/pythonshouce27/controlflow.html#tut-functions
http://www.python(去掉)tab.com/html/pythonshouce27/controlflow.html#if
http://www.pytho(去掉)ntab.com/html/pythonshouce27/introduction.html#tut-strings
http://www.cnblogs.com/vamei/archive/2012/05/28/2522677.html
leetcode AC1 感受的更多相关文章
- 初刷LeetCode的感受
自从上个月进入实验室的云安全项目组后,因为要接触到实际的代码,在实验室博士的建议下我们项目组的硕士开始刷LeetCode练习编程能力,保持每周抽空刷几道算法题.虽然刷的不多,到现在一共只刷了不到30题 ...
- python leetcode 1
开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目. 提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者. 1. Two Sum. class ...
- LeetCode OJ学习
一直没有系统地学习过算法,不过算法确实是需要系统学习的.大二上学期,在导师的建议下开始学习数据结构,零零散散的一学期,有了链表.栈.队列.树.图等的概念.又看了下那几个经典的算法——贪心算法.分治算法 ...
- 算法学习笔记(LeetCode OJ)
================================== LeetCode的一些算法题,都是自己做的,欢迎提出改进~~ LeetCode:http://oj.leetcode.com == ...
- 【LeetCode题意分析&解答】38. Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
- leetcode刷题总结
题外话 今年大三,现正值寒假时间,开学就开始大三下学期的生活了. 在大三临近结束的时间,也就是复习考试的时间里,我每天都会用早上的时间来刷codewars.刚开始玩的时候,一到8kyu的题目如果稍微难 ...
- leetcode算法题(JavaScript实现)
题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象.String对象等原生方法,构造函数. ...
- LeetCode 287. Find the Duplicate Number (找到重复的数字)
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...
- LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>
LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数 ...
随机推荐
- 一个源文件可以写出多个class吗?编译后,会不会生成多个class文件?
会.一个.java源文件里面可以有内部类.其他类(有且仅有一个类可以声明为public),所以编译后,可以有多个class文件.
- ORM的单表操作
ORM的单表操作 MTV框架包含一个重要的部分就是ORM----对象关系映射(Object Relational Mapping),它实现了数据模型与数据库的解耦,即数据模型的设计.利用它我们不需要依 ...
- 倒数第N个字符串
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时,序列为 { aaa, aab, aac, . ...
- Zabbix故障总结(持续更新)
Zabbix housekeeper processes more than 75% busy 问题原因 为了防止数据库持续增大,zabbix有个自动删除历史数据的机制,就是housekeeper,而 ...
- SQL按分隔符拆分字段串
CREATE VIEW [dbo].[Split_BusinessUnit] AS WITH tt AS ( SELECT BusinessUnit.BusinessUnitId , Business ...
- Nginx 分布式session共享问题
在集群的时候每次访问,都会被代理转到不同的服务器,那么在这些服务器之间如何共享session? 解决方式1:session复制 只能在window下好使,web服务器解决(广播机制,将一台机器上的se ...
- 动态添加XtraTabControl的page页和子窗体
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- HBase的Shell命令和JavaAPI
HBase的shell操作和JavaAPI的使用: Shell 表操作 创建表 create 'student','info' #表名 列族 插入表 put 'student','1001','inf ...
- 数据库类型总结对比(Java,Hibernate,SQLServer,MySQL,Oracle)
- 元组,列表的增删改查, for,range 循环
1. list(增删改查) 列表可以装大量的数据. 不限制数据类型. 表示方式:[] 方括号中的每一项用逗号隔开 列表和字符串一样.也有索引和切片 常用的功能: 1. 增: append() 2. 删 ...