首页 > 代码库 > 统计一个字符串的最后单词的长度
统计一个字符串的最后单词的长度
这道题目被归为简单题目,对我来讲,却不觉得简单。有些题目是算法题,有些题目是细节题。算法往往难想,细节往往难以实现。两者无论哪个存在难度,都不能算是简单题。
这道题目难度在于,直观上要分很多种情况讨论,而实际上可以做简单归纳,是难度大大降低。而归纳、提炼能力又有几个人能做好呢?所以此题很难。
不同的case:
(1) ""
(2) "a"
(3) " "
(4) "a b "
(5) "abcd"
(6) "a "
解决这道题,如果思路错了就会很麻烦。例如,如果采用两指针法,就会繁琐,因为两个指针的位置关系没有一个不变式。如果这个思路不可行,就要及时切换。例如:
(1)从后向前扫描,因为只统计最后单词长度,所以如此切入,问题就简单很多。只用考虑空格和越界就够了。
int lengthOfLastWord(const char *s) { int length = -1; while (s[++length] != NULL); for (int i = length - 1; i >= 0; i--) { if (s[i] != ' ') { int marker = i; while (--i >= 0 && s[i] != ' '); return marker - i; } } return 0; }(2)再者还是从前往后。但是,不考虑迭代过程中的其他情况,只考虑最后一个单词的长度。
int lengthOfLastWord(const char *s) { int n; int q, cnt=0; for (q = 0; s[q] != '\0'; q++) { if (s[q] != ' ') cnt++; else if (s[q+1] != ' ' && s[q+1] != '\0') cnt = 0; } return cnt; }简化版:
int lengthOfLastWord(const char *s) { int len = 0, lastlen = 0, i = 0; while (*s) { if (*s++ ==' ') len = 0; else lastlen = ++len; } return lastlen; }
(3)也可以领用stringstream的,但是这种做法不提倡
int lengthOfLastWord(const char *s) { stringstream stream(s); string t; while (stream >> t); return t.length(); }
统计一个字符串的最后单词的长度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。