泰国金木棉做网站网站,哈尔滨建设工程招标网,wordpress dux1.3,怎么样建立一个网站#x1f680;个人主页#xff1a;奋斗的小羊 #x1f680;所属专栏#xff1a;C 很荣幸您能阅读我的文章#xff0c;诚请评论指点#xff0c;欢迎欢迎 ~ 目录 #x1f4a5;1、字符串#x1f4a5;1.1 字符串相加#x1f4a5;1.2 验证回文字符串#x1f4a5;1.3 反转… 个人主页奋斗的小羊 所属专栏C 很荣幸您能阅读我的文章诚请评论指点欢迎欢迎 ~ 目录 1、字符串1.1 字符串相加1.2 验证回文字符串1.3 反转字符串1.4 字符串最后一个单词的长度1.5 字符串中的第一个唯一字符1.6 反转字符串中的单词 总结 1、字符串
1.1 字符串相加
Leetcode——字符串相加 有时候我们需要非常大的数据相加时整型的范围不够就可以将数据转换为字符串的形式运算再将结果转回为整型。 整型相加时是从后往前加的这里的字符串相加我们也从后往前加。不断取出两个字符串的末尾字符转换为整形后相加再用追加到字符串末尾其中还要考虑进位的情况。 因为string类支持operator[]所以我们可以通过下标的方式遍历字符串。 其中两个字符串的第一位相加也可能有进位所以循环结束后还需要判断进位是否为1。 因为我们是从后往前加的所以最后还需要用reverse将字符串翻转过来。
class Solution {
public:string addStrings(string num1, string num2) {string s;int n 0;int end1 num1.size() - 1;int end2 num2.size() - 1;while (end10 || end20){int n1 end10 ? num1[end1--] - 0 : 0;int n2 end20 ? num2[end2--] - 0 : 0;int ret n1 n2 n;n ret / 10;ret % 10;s ret 0;}if (n 1){s 1;}reverse(s.begin(), s.end());return s;}
};用下标的方式从后往前遍历字符串相加得到的值追加到字符串最后再反转字符串。 1.2 验证回文字符串
Leetcode——验证回文串 将字符串存到一个stack和一个queue中循环比较top()当栈和队列为空时则字符串回文当某次top()不相等时则不回文。 用范围for遍历字符串如果是符合我们要求的字符就插入栈和队列中。
class Solution {
public:bool isPalindrome(string s) {for (auto e : s){if (e a e z){_st.push(e);_qu.push(e);}if (e A e Z){e 32;_st.push(e);_qu.push(e);}if (e 0 e 9){_st.push(e);_qu.push(e);}}while (!_st.empty()){if (_st.top() ! _qu.front()){return false;}_st.pop();_qu.pop();}return true;}
private:stackint _st;queueint _qu;
};1.3 反转字符串
Leetcode——反转字符串 只需要反转对应的区间就行注意不能越界。
class Solution {
public:string reverseStr(string s, int k) {for (size_t i 0; i s.size(); i 2*k){size_t n i k s.size() ? s.size() : i k;reverse(s.begin() i, s.begin() n);}return s;}
};1.4 字符串最后一个单词的长度
牛客——最后一个单词的长度 #include iostream
using namespace std;int main() {string s;getline(cin, s);size_t pos s.rfind( );size_t length s.size() - pos - 1;cout length endl;
}1.5 字符串中的第一个唯一字符
Leetcode——字符串中的第一个唯一字符 这种类似计数的题可以用哈希映射的方法首先定义一个用于计数的数组然后将字符串映射到数组中再通过遍历字符串得到下标间接遍历数组来找出为1的元素返回下标。 定义数组时需要初始化为全0。
class Solution {
public:int firstUniqChar(string s) {int arr[26] {0};for (auto e : s){arr[e - a];}for (size_t i 0; i s.size(); i){if (1 arr[s[i] - a]){return i;}}return -1;}
};1.6 反转字符串中的单词
Leetcode——反转字符串中的单词 reverse(s.begin(), s.end()); 参数双向迭代器指向要反转的序列的初始和最终位置。使用的范围是[ )左闭右开。 从前往后遍历字符串找 空格的位置用reverse反转单词。需要注意的是reverse的参数是左闭右开的。
class Solution {
public:string reverseWords(string s) {int pos1 0;int pos2 s.find( , pos1);while (pos2 s.size()){reverse(s.begin() pos1, s.begin() pos2);pos1 pos2 1;pos2 s.find( , pos1);}reverse(s.begin() pos1, s.end());return s;}
};总结
首先要认真审题有思路了切不可着急写先在心中推敲一下看当前思路是否可行有大概的把握了再着手实现不要太钻牛角尖如果某个思路迟迟实现不了就把视角放广一点寻找新的思路