字符串里面最后一个单词的长度<难度系数⭐⭐> | 验证一个字符串是否是回文<难度系数⭐>
【摘要】 1、字符串里面最后一个单词的长度<难度系数⭐⭐>📝 题述:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于 5000。(注:字符串末尾不以空格为结尾)。输入描述:输入一行,代表要计算的字符串,非空,长度小于 5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。💨示例1:输入:hello nowcoder输出:8⚠ 说明最后一个单词为 nowcoder,长度为...
1、字符串里面最后一个单词的长度<难度系数⭐⭐>
📝 题述:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于 5000。(注:字符串末尾不以空格为结尾)。
输入描述:输入一行,代表要计算的字符串,非空,长度小于 5000。
输出描述:输出一个整数,表示输入字符串最后一个单词的长度。
💨示例1:
输入:hello nowcoder
输出:8
⚠ 说明
最后一个单词为 nowcoder,长度为 8。
🧷 平台:Visual studio 2017 && windows
🔑 核心思想:无
#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:
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)