【C++ • STL • 力扣】详解string相关OJ
文章目录
- 1、仅仅翻转字母
- 2、字符串中的第一个唯一字符
- 3、字符串里最后一个单词的长度
- 4、验证一个字符串是否是回文
- 5、字符串相加
- 总结
ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ"
1、仅仅翻转字母
力扣链接
代码1展示:【下标】
class Solution { bool isLetter(const char& c) { if (c >= 'a' && c = 'A' && c int left = 0; int right = s.size() - 1; while (left = 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; } };
这个代码,使用头插,时间复杂度为O(N^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题。希望给友友们带来帮助!
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...