Leetcode* 58 最后一个单词的长度

题目
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:
输入: “Hello World”
输出: 5
给定函数int lengthOfLastWord(char s)*
思路:

  • 判断字符串是否为空;
  • 得到数组的长度,从末尾最后一个开始寻找不为space的字符
    Ps:遇到" "情况无法判断;
    更正后代码如下:
int lengthOfLastWord(char* s) {
    int i=0;
    int num=0;
    if(*s=='\0')
        return 0;
    while(*(s+i)!='\0')
              i++;
    for(int j=0;j<i;j++)
    {
        if(*(s+j)==' ')
          {
        if(j==i-1)
            return 0;
        else
            continue;
        }
        else
            break;
    }//判断是否全部为' ';
    while(*(s+i-1)==' ')
        i--;//找到部位' '的字符;
   while(*(s+i-1)!=' ')
   {
       if(i!=0) i--,num++;
       else return num; 
   }
   
    return num;   
}

代码比较水,贴上通过后个人觉得比较好的大神代码
①.

int lengthOfLastWord(char* s) 
{
	if(!s)
		return 0;
 
	int sLen = strlen(s);
	int i = 0;
	int lengthOfLastWordCount = 0;
	
	while(s[sLen-1]==' ') 
		sLen--;
	for(i = sLen-1;i>=0;i--) {
		if(s[i]==' ') {
			break;
		}
		lengthOfLastWordCount++;
	}
	
	return lengthOfLastWordCount;
}

巧妙之处在于最后一个循环避免了溢出的情况

for(i = sLen-1;i>=0;i--) 

这个地方溢出弄了一段时间,有点菜,哈哈。
②.

int lengthOfLastWord(char* s) {
    int i,j=0,sum=0;
    if(strlen(s)==0) return 0;
    for(i=0;s[i]!='\0';i++){
        if(s[i]!=32) j=i;
    }
    for(i=0;i<=j;i++){
        if(s[i]!=32) sum++;
        else sum=0;
    }
    return sum;
}

这个代码对我这种新手简直是打击,
后面这个循环思维我是没有的。。。

 for(i=0;i<=j;i++){
        if(s[i]!=32) sum++;
        else sum=0;

每次都会算出每个单词的长度,还循环。可以用作寻找字符串中最大单词长度的代码了~嗯,拿小本本记下来

第一次发博客,还请各位指点,以后坚持每天一篇啦~

猜你喜欢

转载自blog.csdn.net/qq_43604259/article/details/84851886
今日推荐