重庆企业公司网站建设,中企动力官网网站,自己网站给别人网站做外链,北京工程建设交易平台#x1f466;个人主页#xff1a;Weraphael ✍#x1f3fb;作者简介#xff1a;目前学习C和算法 ✈️专栏#xff1a;C航路 #x1f40b; 希望大家多多支持#xff0c;咱一起进步#xff01;#x1f601; 如果文章对你有帮助的话 欢迎 评论#x1f4ac; 点赞#x1… 个人主页Weraphael ✍作者简介目前学习C和算法 ✈️专栏C航路 希望大家多多支持咱一起进步 如果文章对你有帮助的话 欢迎 评论 点赞 收藏 加关注✨ 目录 一、把字符串转化为整数二、字符串相加三、反转字符串四、字符串中的第一个唯一字符五、字符串最后一个单词的长度六、验证回文串七、反转字符串 II八、 反转字符串中的单词 III九、高精度乘以高精度 一、把字符串转化为整数
题目链接点击跳转 class Solution {
public:int StrToInt(string str) {// 特判集合可能为空集的情况if (str.empty()) return 0;int flag 1; // 用来判断这个数是正数还是负数int i 0; // 遍历字符串if (str[i] -){flag -1;i;}else if (str[i] ){i;}int ans 0; // 存储数字for (; i str.size(); i){if (str[i] 0 || str[i] 9){return 0;}ans ans * 10 (str[i] - 0);}return ans * flag;}
};二、字符串相加
题目链接点击跳转 class Solution {
public:// 解决思路模拟string addStrings(string num1, string num2) {// 将字符串翻转(原因进位头插很头疼)reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());string ans; // 答案int t 0; // 进位for (int i 0; i num1.size() || i num2.size() || t; i){if (i num1.size()) t num1[i] - 0;if (i num2.size()) t num2[i] - 0;ans.push_back(t % 10 0);t / 10;}// 最后将答案翻转reverse(ans.begin(), ans.end());return ans;}
};三、反转字符串
题目链接点击跳转 class Solution {
public:// 解决思路双指针算法void reverseString(vectorchar s) {vectorchar::iterator left s.begin();vectorchar::iterator right s.end() - 1;while (left right){char t *left;*left *right;*right t;left;right--;}for (auto e : s){cout e;}}
};四、字符串中的第一个唯一字符
题目链接点击跳转
解题思路1哈希表
class Solution {
public:int firstUniqChar(string s) {unordered_mapchar, int heap;for (int i 0; i s.size(); i){heap[s[i]];}for (int i 0; i s.size(); i){if (heap[s[i]] 1){return i;}}return -1;}
};解题思路2用数组模拟哈希表
class Solution {
public:int firstUniqChar(string s) {int heap[26] {0};for (int i 0; i s.size(); i){heap[s[i] - a];}for (int i 0; i s.size(); i){if (heap[s[i] - a] 1){return i;}}return -1;}
};五、字符串最后一个单词的长度
题目链接点击跳转 解题思路1从最后一个字符开始遍历直到遇到空格停止
#include iostream
#include string
using namespace std;int main()
{string s;getline(cin, s);int ans 0;for (int i s.size() - 1; i 0; i--){if (s[i] ! ) ans;else break;}cout ans endl;return 0;
}解题思路2巧用函数不推荐因为函数根本记不住hh
#include iostream
using namespace std;int main()
{string s;getline(cin, s);// rfind从后往前查找目标int space_of_lastpos s.rfind( );int last_pos s.size() - 1;int res last_pos - space_of_lastpos;cout res endl;return 0;
}六、验证回文串
题目链接点击跳转 class Solution {
public:bool isPalindrome(string s) {// 将大写字符转换为小写字符string str;for (auto e : s){if (e A e Z){str tolower(e);}// 移除所有非字母数字字符之后// 意思是保留字母 数字else if ((e a e z) || (e 0 e 9)){str e;}}// 判断回文串if (str.empty()) return true; // 特殊情况string str2(str);reverse(str2.begin(), str2.end());if (str str2) return true;else return false;}
};七、反转字符串 II
题目链接点击跳转 class Solution {
public:// 思路将题目描述转化为代码即可string reverseStr(string s, int k) {// 间隔2kfor (int i 0; i s.size(); i (2 * k)) {// 1. 每隔 2k 个字符的前 k 个字符进行反转// 如果剩余字符小于 2k 但大于或等于 k 个则反转前 k 个字符if (s.size() - i k){reverse(s.begin() i, s.begin() i k );continue;}// 3. 剩余字符少于 k 个则将剩余字符全部反转。else{reverse(s.begin() i, s.begin() s.size());}}return s;}};八、 反转字符串中的单词 III
题目链接点击跳转 class Solution {
public:// 解题思路双指针算法string reverseWords(string s) {for (int i 0; i s.size(); i){int j i;while (j s.size() s[j] ! ) j;if (s[j] \0){reverse(s.begin() i, s.begin() s.size());break;}reverse(s.begin() i, s.begin() j);i j;}return s;}
};九、高精度乘以高精度
题目链接点击跳转 class Solution {
public:string multiply(string num1, string num2) {vectorint A,B;// 到存int n num1.size(), m num2.size();for (int i n - 1;i 0; i--)A.push_back(num1[i] - 0);for (int i m - 1;i 0;i--)B.push_back(num2[i] - 0);vectorint c(n m);for(int i 0;i A.size();i){for(int j 0;j B.size();j){c[i j] A[i] * B[j];// 处理进位if (c[i j] 10){c[i j 1] c[i j] / 10;}c[i j] % 10;}}while(c.size() 1 c.back() 0)c.pop_back();reverse(c.begin(), c.end());string ans;for (size_t i 0; i c.size(); i){ans c[i] 0;}return ans;}
};