C++ String 类实战:常见算法题解析与优化
字符串处理是 C++ 面试和算法竞赛中的高频考点。掌握 std::string 的常用操作,配合合理的算法策略,能显著提升解题效率。本文选取了四个经典例题,从输入处理到双指针、哈希计数等技巧逐一拆解。
一、字符串最后一个单词的长度
题目背景
在读取包含空格的整行文本时,普通的 cin >> str 会在遇到第一个空格时停止,导致无法获取完整内容。此时应使用 getline 函数。
核心逻辑
要获取最后一个单词的长度,常规思路是从头遍历统计空格位置,但这样比较冗余。利用 string 类的 rfind 成员函数可以从末尾向前查找,直接定位最后一个空格的位置,计算更简洁高效。
知识点补充:rfind 用法
rfind用于从后往前查找子串或字符。若找到,返回起始下标;若未找到,返回string::npos(一个无符号大整数,代表无效位置)。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
// cin 遇到空格会截断,这里必须用 getline 读整行
getline(cin, str);
size_t pos = str.rfind(' ');
// 判断是否找到了空格
if (pos != string::npos) {
// 总长度减去空格位置再减 1,即为最后一个单词长度
cout << str.size() - (pos + 1) << endl;
} else {
// 没找到空格,说明整个字符串就是一个单词
cout << str.size() << endl;
}
return 0;
}
注意:string::npos 是静态常量,判断时务必使用 != string::npos,不要写成 -1,因为 size_t 是无符号类型。
二、验证回文串
题目背景 给定一个字符串,忽略非字母数字字符及大小写差异,判断其是否为回文串。
核心逻辑


