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".

click to show clarification.

Clarification:

  • 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

时间: 2024-12-19 17:18:26

leetcode AC1 感受的相关文章

初刷LeetCode的感受

自从上个月进入实验室的云安全项目组后,因为要接触到实际的代码,在实验室博士的建议下我们项目组的硕士开始刷LeetCode练习编程能力,保持每周抽空刷几道算法题.虽然刷的不多,到现在一共只刷了不到30题,但在刷题的过程中还是有很多感触的. 实验室的博士建议我们按照题目的难易顺序循序渐进由易到难来刷,我也就照做了.因为前段时间在系统地学Python语言,所以我主要用的是Python语言来做,有的题目也采用了C/C++.Java甚至C#多种语言来尝试.在刷题的过程中,总结了自己的一些问题: 1. 对于

LeetCode——1

从国庆到现在都没更新 这个月也真是过的凄惨 前半个月一直在看病 忧郁了大半个月 还好是缓过来了 很感谢那段时间朋友们的陪伴 以后要更爱自己才是 嗯 之后看了一周多的hadoop 无奈总是出现各种问题 其实真的很想感受下hadoop的神奇之处 不过还是暂且搁置吧 缓几天再去看也许问题就解决了呢也不一定 今天刚忙完 加入了一个新的team 感觉很棒 嗯 总有一种离自己梦想更进一步的感觉 但是内心却还是蛮忧伤的 也许这段时间的力不从心让自己有点失望吧 希望自己早日康复 还有很多梦想想要去实现呢 有些梦

【LeetCode题意分析&解答】38. Count and Say

The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ... 1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as "one 2, then one 1" or 1211. Given an

【LeetCode】如何学习LeetCode?

很多人把在LeetCode上做题称之为刷题,对于已经掌握了相关算法的人来说,这样的称呼的确没有问题,但对于那些将LeetCode作为提高自己算法能力手段的人来说,"刷题"这个称呼并不算很合适.因为做题是一个提升自己能力的途径,如果只满足于把题目做完.状态变为accept的话,并不能最有效提高编程能力. 刚开始,我也犯了上面的错误,机械的做着上面的题目,只要通过了,就不再去想其他更巧妙的方法了.尤其有些题目,还有Follow up的要求,这些更是没有考虑.不会做的题目,也只是简单地思考下

leetcode 463

题目描述: You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly on

leetcode - String to Integer (atoi) 字符串转整数

Implement atoi to convert a string to an integer. Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. 题目:实现字符串转整数 注意事项:考虑好各种可能的输入(坑); public class Solution

Leetcode第三题_Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters Total Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the

LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>

LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数大于两次,删除多余的复制,返回删除后数组长度,要求不另开内存空间. C++ 献上自己丑陋无比的代码.相当于自己实现一个带计数器的unique函数 class Solution { public: int removeDuplicates(std::vector<int>& nums) {

两个月刷400道leetcode之后的经验与心得总结、真题整理分享

前言 随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例.这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目.刷题的网址非常的多,其中以leetcode是最为出名的. 在刷题上,我花了大量的时间,蹚了许多的坑,总结了一下,主要有这三个问题: 刷过的题老是忘,第二次刷的时候还是不会做 刷题的速度很慢,即使花一天时间,也常常只能刷五六道 坚持不下来,老是刷到一半就停滞下来了,当我第二