• Length of Last Word


    
    
     1 class Solution {
     2 public:
     3     int lengthOfLastWord(const char *s) {
     4         int length=0;
     5         int i=0;
     6         int n=0;//存储遇到空格之前的word的长度
     7         if(s!=NULL)
     8         {
     9             
    10             while(s[i]!='')
    11             {
    12                 while(s[i]!=' ')
    13                 {
    14                     n++;
    15                     i++;
    16                 }
    17                 length=n;
    18                 n==0;
    19             }
    20         }
    21         return length;
    22     }
    23 };

    Time Limit Exceeded


    不止超时,程序也不对,我本来想着是用一个变量n记录上一个word的长度,然后把n赋给length,然后遇到空格就把n清零

    其实即使这样也不对,因为如果最后那个没有空格,那就返回的是倒数第二个word的值了。

     C++中有函数可以去除首尾空格,并将字符串按一定格式分割。

    刚才和实验室的同学讨论,他说可以从后向前,对呀,这个想法太好了,呵呵

    PS:又谈到几个题,数组中的数都是重复2次出现,只有一个是出现了一次,怎么找出那个数,

    我说可以先排序,然后设置两个指针就行了,时间复杂度O(nlgn)

    他说时间复杂度和空间复杂度都是O(1)的,所有数据异或操作就行了,异或操作可以交换次序的,也不用事先排序了。

    可以扩展为所有出现2次,只有2个出现1次,还有所有出现3次,只有一个出现一次等等,当然解法不同了。

    又说道另外一个题,怎么判断一个链表是否有环。记录所有扫描的指针,扫描下一个时查看是否之前扫描过,这种方法显然不行的。

    他说可以设置两个指针,快的在前,慢的在后,当快的跑到慢的后面的时候说明有环。

    好了,言归正传

     1 class Solution {
     2 public:
     3     int lengthOfLastWord(const char *s) {
     4         int length=0;
     5         if(s!=NULL)
     6         {
     7             const char *p;
     8             p=s;
     9             while(*s!='')
    10             {
    11                 s++;
    12             }
    13             s--;
    14             /*
    15             while(*s!=' ')
    16             {
    17                 length++;
    18                 s--;
    19             }//这样写,错误,eg:"a",根本就没有空格,说明循环判断的条件不对
    20             */
    21             while((*s!=' ')&&(s>=p))//因为s--了,所以不能是s==p来判断
    22             {
    23                 length++;
    24                 s--;
    25             }
    26         }
    27         return length;
    28     }
    29 };

    Status: 

    Wrong Answer

    Input: "a "
    Output: 0
    Expected: 1

    我在codeblocks中试了,是可以的,不知道为什么在leetcode上没有通过。

    网上查找了一下,发现其实还是想的不周到,既然从后向前,那么后边的空格应该先去掉的,若输入"a  "那么我写的结果就会是错的。

    需要在上面代码21行之前加上下面几句话就AC了

                while(*s==' ')
                {
                    s--;
                }
  • 相关阅读:
    可输入下拉框
    display:table-cell 相当于td
    循环拼接HTML
    jq操纵select
    echarts柱状图使用
    原生js 获取路由参数
    js下拉模糊查询
    ie 的hack
    vue 兼容ie11
    vuecli中的绝对路径和相对路径
  • 原文地址:https://www.cnblogs.com/crane-practice/p/3584073.html
Copyright © 2020-2023  润新知