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]!='\0')
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!='\0')
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--;
            }

 

 

 

posted on 2014-03-06 19:31  crane_practice  阅读(219)  评论(0编辑  收藏  举报

导航