题目一:仅仅反转字母
题目描述:
给定一个字符串,返回“反转后的”字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例:
输入:“a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”
思路:
使用两个指针,开始时头指针指向字符串开头,尾指针指向字符串末尾(’\0’的前一个字符)。头指针先向后寻找待反转字母,尾指针再向前寻找待反转字母,然后反转这两个待反转字母即可。重复该步骤,直到头指针和尾指针发生错位为止。
动图演示:

代码:
class Solution {
public:
//判断字符ch是否是字母
bool IsLetter(char ch)
{
if ((ch >= 'a'&&ch <= 'z')
|| (ch >= 'A'&&ch <= 'Z'))
return true;
else
return false;
}
//仅仅反转字母
string reverseOnlyLetters(string s) {
if (s.empty()) //若s为空字符串,则返回其本身
return s;
size_t begin = 0, end = s.size() - 1; //定义头指针和尾指针,用于反转字母
while (begin < end) //当还有字母可反转时,循环继续
{
while (begin < end && !IsLetter(s[begin])) //头指针寻找待反转字母
begin++;
while (begin < end && !IsLetter(s[end])) //尾指针寻找待反转字母
end--;
swap(s[begin], s[end]); //交换这两个待反转字母
begin++;
end--;
}
return s; //返回反转后的字符串
}
};
注意:若传入的字符串尾空字符串,则直接返回即可。
题目二:字符串中的第一个唯一字母
题目描述:
给定一个字符串,找到它的第一个不重复的字母,并返回它的索引。如果不存在,则返回-1。
示例:
s = “loveleetcode”
返回 2
思路:
用一个含义26个元素的数组统计26个字母在字符串中出现的次数,然后再遍历一次字符串,寻找字符串中第一个只出现一次的字母,并返回它的索引,若不存在,则返回-1。
代码:
class Solution {
public:
int firstUniqChar(string s) {
size_t table[26] = {
0

本文探讨了五个编程问题:字母反转、找出第一个唯一字母、计算单词长度、验证回文串以及字符串相加。通过实例和代码实现,展示了如何高效处理字符串中的各种技术挑战。
最低0.47元/天 解锁文章
1248

被折叠的 条评论
为什么被折叠?



