类似5173的网站怎么做,帝国系统做网站地图,网站上线确认书,重庆市建设工程造价信息网官方目录
一、反转字符串 II
二、反转字符串中的单词 III
三、找出字符串中第一个只出现一次的字符
四、字符串相乘
五、把字符串转换成整数 一、反转字符串 II
给定一个字符串 s 和一个整数 k#xff0c;从字符串开头算起#xff0c;每计数至 2k 个字符#xff0c;就反转… 目录
一、反转字符串 II
二、反转字符串中的单词 III
三、找出字符串中第一个只出现一次的字符
四、字符串相乘
五、把字符串转换成整数 一、反转字符串 II
给定一个字符串 s 和一个整数 k从字符串开头算起每计数至 2k 个字符就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个则反转前 k 个字符其余字符保持原样。
示例 1 输入s abcdefg, k 2 输出bacdfeg 示例 2 输入s abcd, k 2 输出bacd 提示
1 s.length 10^4s 仅由小写英文组成1 k 10^4
代码实现
class Solution {
public:string reverseStr(string s, int k) {size_t pos 0; // pos 为每次计数的起点while (pos s.size()){if (pos k s.size()) // 剩余字符大于等于 kreverse(s.begin() pos, s.begin() pos k);else // 剩余字符小于 kreverse(s.begin() pos, s.end());pos 2 * k;}return s;}
}; 二、反转字符串中的单词 III
给定一个字符串 s 你需要反转字符串中每个单词的字符顺序同时仍保留空格和单词的初始顺序。
示例 1 输入s Lets take LeetCode contest 输出steL ekat edoCteeL tsetnoc 示例 2: 输入 s God Ding 输出doG gniD 提示
1 s.length 5 * 10^4s 包含可打印的 ASCII 字符。s 不包含任何开头或结尾空格。s 里 至少 有一个词。s 中的所有单词都用一个空格隔开。
代码实现
class Solution {
public:string reverseWords(string s) {size_t pos 0; // pos 为每个待反转的单词的起点size_t found s.find( , pos); // found 为每个待反转的单词的终点的下一个位置while (found ! string::npos){reverse(s.begin() pos, s.begin() found);pos found 1;found s.find( , pos);}reverse(s.begin() pos, s.end()); // 反转最后一个单词return s;}
}; 三、找出字符串中第一个只出现一次的字符
描述
找出字符串中第一个只出现一次的字符
数据范围
输入的字符串长度满足 1≤ n ≤1000
输入描述
输入一个非空字符串
输出描述
输出第一个只出现一次的字符如果不存在输出 -1
示例 1 输入asdfasdfo 输出o 代码实现
#include iostream
using namespace std;
int main()
{string s;cin s;// 统计 s 中的每个字符出现的次数int count[256] { 0 };for (size_t i 0; i s.size(); i){count[s[i]] 1;}
// 找出字符串中第一个只出现一次的字符bool flag false; // 假设字符串中不存在只出现一次的字符for (size_t i 0; i s.size(); i){if (count[s[i]] 1){flag true;cout s[i] endl;break;}}if (flag false)cout -1 endl;return 0;
} 四、字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2返回 num1 和 num2 的乘积它们的乘积也表示为字符串形式。
注意不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1: 输入: num1 2, num2 3 输出: 6 示例 2: 输入: num1 123, num2 456 输出: 56088 提示
1 num1.length, num2.length 200num1 和 num2 只能由数字组成。num1 和 num2 都不包含任何前导零除了数字0本身。
代码实现
class Solution {
public:// 字符串相加string add(string num1, string num2) {string ans;int end1 num1.size() - 1, end2 num2.size() - 1;size_t carry 0; // 进位while (end1 0 || end2 0 || carry 0){size_t val1 end1 0 ? (num1[end1--] - 0) : 0;size_t val2 end2 0 ? (num2[end2--] - 0) : 0;size_t sum val1 val2 carry;
ans.insert(ans.begin(), sum % 10 0); // 头插carry sum / 10;}return ans;}
// 字符串相乘string multiply(string num1, string num2) {if (num1 0 || num2 0) // 特殊情况{return string(0);}// 思路// 123 * 456 // 123 * (400 50 6) // [(123 * 4) * 100] [(123 * 5) * 10] (123 * 6)// 所以首先考虑计算出 123 * 6/5/4然后在其后面添加适当的 0最后再将所有的积相加string ans;int end2 num2.size() - 1;size_t count 0; // 需要添加的 0 的数量while (end2 0){size_t val2 num2[end2--] - 0;string product;size_t carry 0;int end1 num1.size() - 1;while (end1 0 || carry 0){size_t val1 end1 0 ? (num1[end1--] - 0) : 0;size_t sum val1 * val2 carry;
product sum % 10 0;carry sum / 10;}reverse(product.begin(), product.end());product.append(count, 0);ans add(ans, product);}return ans;}
}; 五、把字符串转换成整数
描述
将一个字符串转换成一个整数要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围
字符串长度满足 0≤ n ≤100 进阶
空间复杂度 O(1) 时间复杂度 O(n)
注意
① 字符串中可能出现任意符号出现除 /- 以外符号时直接输出 0
② 字符串中可能出现 /- 且仅可能出现在字符串首位。
输入描述
输入一个字符串,包括数字字母符号,可以为空
返回值描述
如果是合法的数值表达则返回该数字否则返回0
示例 1 输入2147483647 返回值2147483647 示例 2 输入1a33 返回值0 代码实现
class Solution {
public:int StrToInt(string str) {// 如果是空字符串则直接返回 0size_t sz str.size();if (sz 0)return 0;// 确定正负号size_t i 0; int sign 1; // 默认为正号if (str[0] ){i;}else if (str[0] -){i;sign -1;}
// 确定绝对值int res 0;while (i sz){if (str[i] 0 str[i] 9)res res * 10 (str[i] - 0);elsereturn 0;i;}return sign * res;}
};