题目1 344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 105
s[i]
都是 ASCII 码表中的可打印字符
思路
这道题就正常交换字符的顺序就行了。
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i = 0; i < s.size() / 2; i++)
{
char c = s[i];
s[i] = s[s.size() - i - 1];
s[s.size() - i - 1] = c;
}
}
};
题目2 541. 反转字符串 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 <= 104
s
仅由小写英文组成1 <= k <= 104
思路
和第一道题的思路一致,要注意的就是到字符串最后的边界位置是否要反转。
class Solution {
public:
string reverseStr(string s, int k) {
if(k == 1 || s.size() == 1)
return move(s);
for(int i = 0; i < s.size();)
{
int lft = i, rht = k - 1 + i >= s.size() ? s.size() - 1 : k - 1 + i;
while(lft < rht)
{
char c = s[lft];
s[lft] = s[rht];
s[rht] = c;
lft++;
rht--;
}
i += 2 * k;
}
return move(s);
}
};
题目3 54. 替换数字
题目描述
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
输入描述
输入一个字符串 s,s 仅包含小写字母和数字字符。
输出描述
打印一个新的字符串,其中每个数字字符都被替换为了number
输入示例
a1b2c3
输出示例
anumberbnumbercnumber
提示信息
数据范围:
1 <= s.length < 10000。
思路
额外空间法
用两个string就可以解决这道题,第一个string对象用于保存输入示例,第二个string对象用于存储判断后的字符或number。
#include<iostream>
#include<string>
int main()
{
using namespace std;
string input,
result;
cin >> input;
for(auto &c : input)
{
if(c >= '1' && c <= '9')
{
result += string("number");
}
else
result += c;
}
cout << result;
return 0;
}
扩容填充法*
这道题可以先遍历一遍,确认字符串中的数字数目,之后对string对象扩容,最后从后向前遍历得出结果。
#include<iostream>
#include<string>
int main()
{
using namespace std;
string result;
cin >> result;
int num = 0;
for(auto &c : result)
{
if(c >= '0' && c <= '9')
num++;
}
int lstIndex = result.size() - 1;
result.resize(result.size() + 5 * num);
for(int i = result.size() - 1; i >= 0; i--)
{
if(result[lstIndex] >= '0' && result[lstIndex] <= '9')
{
result[i--] = 'r';
result[i--] = 'e';
result[i--] = 'b';
result[i--] = 'm';
result[i--] = 'u';
result[i] = 'n';
}
else
{
result[i] = result[lstIndex];
}
lstIndex--;
}
cout << result;
return 0;
}
标签:字符,string,示例,day7,随想录,算法,字符串,输入,size
From: https://www.cnblogs.com/code4log/p/18396151