字符串里面最后一个单词的长度<难度系数⭐⭐> | 验证一个字符串是否是回文<难度系数⭐>

举报
跳动的bit 发表于 2022/06/15 11:22:41 2022/06/15
【摘要】 1、字符串里面最后一个单词的长度<难度系数⭐⭐>📝 题述:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于 5000。(注:字符串末尾不以空格为结尾)。输入描述:输入一行,代表要计算的字符串,非空,长度小于 5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。💨示例1:输入:hello nowcoder输出:8⚠ 说明最后一个单词为 nowcoder,长度为...

1、字符串里面最后一个单词的长度<难度系数⭐⭐>

📝 题述:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于 5000。(注:字符串末尾不以空格为结尾)。

输入描述:输入一行,代表要计算的字符串,非空,长度小于 5000。

输出描述:输出一个整数,表示输入字符串最后一个单词的长度。

💨示例1:

输入:hello nowcoder
输出:8

⚠ 说明

最后一个单词为 nowcoder,长度为 8。

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:无

nowcoder原题

#include<string>
#include<iostream>
using namespace std;
int main()
{
    string s;
    //cin >> s;
    getline(cin, s);
    size_t pos = s.rfind(' ');
    if(pos != string::npos)//多个单词
    {
        cout << s.size() - (pos + 1) << endl;
    }
    else//一个单词
    {
        cout << s.size() << endl;
    }
    return 0;
}

📝说明

scanf 和 cin 都有一个特点,默认遇到空格或换行,它会认为空格前后是两个独立的变量。

针对这种情况我们就不能用 cin 了,在 string 里提供了一个 getline:

它遇到换行才结束。
在这里插入图片描述

2、验证一个字符串是否是回文<难度系数⭐>

📝 题述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。本题中,我们将空字符串定义为有效的回文串。

💨示例1:

输入:“A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串

💨示例2:

输入: “race a car”
输出: false
解释:“raceacar” 不是回文串

⚠ 提示

  • 1 <= s.length <= 2 * 10^5^
  • 字符串 s 由 ASCII 字符组成

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:

这道题数字是一个坑,对于字母比较我们可以用小的 + 32 或者全部转小写或大写。

  1. 常规写法,暴力求解,稍不注意就会写得比较复杂,然后过不了
  2. 先将所有的字母转大写或小写

leetcode原题

1:

class Solution {
public:
    bool IsLetterOrNun(char ch)
    {
        if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool isPalindrome(string s) {
        int begin = 0, end = s.size() - 1;
        while(begin < end)
        {
            while(begin < end && !IsLetterOrNun(s[begin]))//跳过非字母数字
            {
                ++begin;
            }
            while(begin < end && !IsLetterOrNun(s[end]))//跳过非字母数字
            {
                --end;
            }
            if(s[begin] != s[end])
            {
                //有一个是数字,就不存在大小写比较问题
                if(s[begin] < 'A' || s[end] < 'A')
                {
                    return false;
                }
                else if(s[begin] < s[end] && s[begin] + 32 == s[end])
                {
                    ++begin;
                    --end;
                }
                else if(s[end] < s[begin] && s[end] + 32 == s[begin])
                {
                    ++begin;
                    --end;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                ++begin;
                --end;
            }
        }
        return true;
    }
};

2:

class Solution {
public:
    bool IsLetterOrNun(char ch)
    {
        if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool isPalindrome(string s) {
        //大写转小写
        for(auto& ch : s)
        {
            if(ch >= 'A' && ch <= 'Z')
            {
                ch += 32;
            }
        }
        int begin = 0, end = s.size() - 1;
        while(begin < end)
        {
            while(begin < end && !IsLetterOrNun(s[begin]))
            {
                ++begin;
            }
            while(begin < end && !IsLetterOrNun(s[end]))
            {
                --end;
            }
            if(s[begin] != s[end])
            {
                return false;
            }
            else
            {
                ++begin;
                --end;
            }
        }
        return true;
    }
};
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。