象山网站优化公司,东盟建设工程有限公司网站,长尾关键词排名工具,免费开商城网站吗文章目录 1、仅仅翻转字母2、字符串中的第一个唯一字符3、字符串里最后一个单词的长度4、验证一个字符串是否是回文5、字符串相加总结 ヾ(๑╹◡╹)#xff89; 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)#xff89; 1、仅仅翻转字母
力扣链接 代码1展示 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹) 1、仅仅翻转字母
力扣链接 代码1展示【下标】 class Solution {
bool isLetter(const char c)
{if (c a c z)return true;else if (c A c Z)return true;elsereturn false;
}
public:string reverseOnlyLetters(string s){int left 0;int right s.size() - 1;while (left right){while (left right !isLetter(s[left])){left;}while (left right !isLetter(s[right])){right--;}swap(s[left], s[right]);left;--right;} return s;}
};代码2展示【迭代器】
class Solution {
bool isLetter(const char c)
{if (c a c z)return true;else if (c A c Z)return true;elsereturn false;
}
public:string reverseOnlyLetters(string s){string::iterator leftIt s.begin();string::iterator rightIt s.end() - 1;while (leftIt rightIt){while (leftIt rightIt !isLetter(*leftIt)){leftIt;}while (leftIt rightIt !isLetter(*rightIt)){rightIt--;}swap(*leftIt, *rightIt);leftIt;--rightIt;} return s;}
};思路快速排序中的单趟排序
知识点C库提供了swap的函数可以直接调用。
2、字符串中的第一个唯一字符
力扣链接 代码展示
class Solution {
public:int firstUniqChar(string s) {int count[26] { 0 };for (auto ch : s){count[ch - a];}for (size_t i 0; i s.size(); i){if (count[s[i] - a] 1){return i;}}return -1;}
};思路计数排序的思想
3、字符串里最后一个单词的长度
牛客链接 代码展示
#include iostream
using namespace std;int main()
{string s;getline(cin, s);size_t pos s.rfind( );if (pos ! string::npos){cout s.size() - (pos 1);}else {cout s.size();}return 0;
}思路首先得到倒数第一个空格的下标然后size进行减去下标1
知识点cin遇见空格会认为获取结束当遇见一行字符串的时候该字符串中间有空格那么就不会获取到整行的字符串。getline会获取一行的字符串遇到空格也不会认为获取终止。
4、验证一个字符串是否是回文
力扣链接 代码展示
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;int 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;}
};5、字符串相加
力扣链接 代码1展示头插
class Solution {
public:string addStrings(string num1, string num2) {int end1 num1.size() - 1;int end2 num2.size() - 1;int carry 0;//进位string s;while (end1 0 || end2 0){//字符转换为数字int val1 end1 0 ? num1[end1] - 0 : 0;int val2 end2 0 ? num2[end2] - 0 : 0;int ret val1 val2 carry;if (ret 10){ret - 10;carry 1;}else{carry 0;}s.insert(s.begin(), ret 0);end1--;end2--;}if (carry 1){s.insert(s.begin(), 1);}return s;}
};这个代码使用头插时间复杂度为ON^2,算法不是最优的 代码2展示
class Solution {
public:string addStrings(string num1, string num2) {int end1 num1.size() - 1;int end2 num2.size() - 1;int carry 0;//进位string s;while (end1 0 || end2 0){//字符转换为数字int val1 end1 0 ? num1[end1] - 0 : 0;int val2 end2 0 ? num2[end2] - 0 : 0;int ret val1 val2 carry;if (ret 10){ret - 10;carry 1;}else{carry 0;}//s.insert(s.begin(), ret 0);s (ret 0);end1--;end2--;}if (carry 1){s 1;//s.insert(s.begin(), 1);}reverse(s.begin(), s. end());return s;}
};思路倒着进行加法运算当两个字符串的位数不一样的时候位数少的前面进行补0【两个字符串都结束的时候才可以认为结束。【注意下标问为0的位置的进位】】
知识点大数运算当一个数字非常大的时候可以用字符串的形式进行存放字符串是不能进行加减运算的。此时就需要我们写代码。 总结
以上就是今天要讲的内容本文详细的介绍了string的OJ题。希望给友友们带来帮助