天天看點

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;
           

每次都會算出每個單詞的長度,還循環。可以用作尋找字元串中最大單詞長度的代碼了~嗯,拿小本本記下來

第一次發部落格,還請各位指點,以後堅持每天一篇啦~