文章目录
- 前言
- 一、字符串相加
- 二、仅仅反转字母
- 三、字符串中的第一个唯一字符
- 四、字符串最后一个单词的长度
- 五、检查字符串是否是回文
- 六、反转字符串 II
- 七、反转字符串中的单词 III
- 八、字符串相乘
- 总结
前言
学习了string后,我们来学习对应的习题。
一、字符串相加
字符串相加
class Solution {
public:
string addStrings(string num1, string num2)
{
string ret;
int next = 0;
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
while(end1 >= 0 || end2 >= 0)
{
int n1 = (end1 >= 0) ? num1[end1] - '0' : 0;
int n2 = (end2 >= 0) ? num2[end2] - '0' : 0;
int sum = n1 + n2 + next;
ret.push_back(sum % 10 + '0');
next = sum / 10;
end1--; end2--;
}
if(next == 1)
{
ret.push_back('1');
}
reverse(ret.begin(), ret.end());
return ret;
}
};
二、仅仅反转字母
仅仅反转字母
class Solution {
public:
bool isLetter(char ch)
{
if (ch >= 'a' && ch <= 'z')
return true;
if (ch >= 'A' && ch <= 'Z')
return true;
return false;
}
string reverseOnlyLetters(string S) {
if (S.empty())
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;
}
};
三、字符串中的第一个唯一字符
字符串中的第一个唯一字符
class Solution {
public:
int firstUniqChar(string s)
{
int arr[26] = {0};
for(auto e : s)
{
arr[e - 'a']++;
}
for(int i = 0; i < s.size(); i++)
{
if(arr[s[i] - 'a'] == 1)
return i;
}
return -1;
}
};
四、字符串最后一个单词的长度
字符串最后一个单词的长度
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
// 不要使用cin>>line,因为会它遇到空格就结束了
// while(cin>>line)
while(getline(cin, line))
{
size_t pos = line.rfind(' ');
cout<<line.size()-pos-1<<endl;
}
return 0;
}
五、检查字符串是否是回文
检查字符串是否是回文
class Solution {
public:
bool isLetterOrNumber(char ch)
{
return (ch >= '0' && ch <= '9')
|| (ch >= 'a' && ch <= 'z')
|| (ch >= 'A' && ch <= 'Z');
}
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 && !isLetterOrNumber(s[begin]))
++begin;
while (begin < end && !isLetterOrNumber(s[end]))
--end;
if (s[begin] != s[end])
{
return false;
}
else
{
++begin;
--end;
}
}
return true;
}
};
六、反转字符串 II
反转字符串 II
class Solution {
public:
string reverseStr(string s, int k)
{
for(int i = 0; i < s.size(); i += 2 * k)
{
if(i + k <= s.size())
reverse(s.begin() + i, s.begin() + i + k);
else
reverse(s.begin() + i, s.end());
}
return s;
}
};
七、反转字符串中的单词 III
反转字符串中的单词 III
class Solution {
public:
string reverseWords(string s)
{
size_t index = 0, find = 0;
while(index < s.size())
{
find = s.find(' ', index);
if(find == string::npos)
{
reverse(s.begin() + index, s.end());
break;
}
else
{
reverse(s.begin() + index, s.begin() + find);
}
index = find + 1;
}
return s;
}
};
八、字符串相乘
字符串相乘
class Solution {
public:
string addStrings(string& num1, string& num2)
{
string ret;
int next = 0;
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
while(end1 >= 0 || end2 >=0)
{
int n1 = end1 >= 0 ? num1[end1] - '0' : 0;
int n2 = end2 >= 0 ? num2[end2] - '0' : 0;
int sum = n1 + n2 + next;
ret.push_back(sum % 10 + '0');
next = sum / 10;
end1--;
end2--;
}
if(next == 1)
{
ret.push_back('1');
}
reverse(ret.begin(), ret.end());
return ret;
}
string multiply(string num1, string num2)
{
if(num1 == "0" || num2 == "0")
{
return "0";
}
string ans = "0";
int next = 0;
int end1 = num1.size() - 1, end2 = num2.size() - 1;
for(int i = end1; i >= 0; i--)
{
string cur;
for(int j = end1; j > i; j--)
cur.push_back('0');
int x = num1[i] - '0';
for(int j = end2; j >= 0; j--)
{
int y = num2[j] - '0';
int sum = 0;
sum = x * y + next;
cur.push_back(sum % 10 + '0');
next = sum / 10;
}
while(next != 0)
{
cur.push_back(next % 10 + '0');
next /= 10;
}
reverse(cur.begin(), cur.end());
ans = addStrings(ans, cur);
}
return ans;
}
};
总结
到这里就结束啦,谢谢大家~