蓝桥杯练习008
作者:互联网
蓝桥杯练习008
面试题 01.06. 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:“aabcccccaaa”
输出:“a2b1c5a3”
示例2:
输入:“abbccd”
输出:“abbccd”
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。
提示:
字符串长度在[0, 50000]范围内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compress-string-lcci
解题思路
传递的参数为要压缩的字符串,可以将字符串的第一个字符先存到cur变量中,并用一个count变量存放当前字符出现的次数,初始化为1次,然后从字符串的第二个位置开始遍历字符串,进行判断。
如果当前的字符cur和字符串的某一个位置上的字符相等,就让count的值加一,如果不相等,就把当前的字符和count的值拼接到字符串变量中,用来保存结果,需要注意的是需要将int类型的变量count用to_string方法转换为字符串类型。
还有需要注意的是:当走到最后的位置时,由于后边没有和最后一个字符进行比较,因此需要在循环结束后把最后那一部分加到结果中。
转换完后,需要对输出进行控制,判断转换后的长度是否小于之前的长度,如果小于,就输出转换后的字符串,否则输出转换之前的字符串。
代码
class Solution {
public:
string compressString(string S) {
string ans = "";//保存结果
char cur = S[0];//用来标记当前字符
int count = 1;//当前字符的数量
for (int i = 1; i < S.length(); i++) {//对字符串进行遍历
if (cur != S[i]) {//当前字符和下一个字符不相等
ans += cur + to_string(count);//将当前字符和数量保存到结果
cur = S[i];//将当前字符换成下一个字符
count = 1;//数量重置为1
}
else count++;//当前字符和下一字符相等,数量加一
}
ans += cur + to_string(count);//处理最后的一部分
return ans.length() < S.length() ? ans : S;//按照题目要求返回字符串较短的那一个
}
};
剑指Offer38.字符串的排列
题目要求
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
限制:
1 <= s 的长度 <= 8
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof
解题思路
代码
class Solution {
public:
vector<string> ret;//存放结果
vector<string> permutation(string s) {
f(s, 0);//从第一个开始找
return ret;
}
//递归求解全排列
void f(string& s, int startIndex) {
//退出机制
if (startIndex == s.length()) {//当到最后时将结果存到ret中
ret.push_back(s);
return;
}
//从startIndex开始向后遍历
for (int i = startIndex; i < s.length(); i++) {
//加一个判断,当之前的首字和现在一样的情况下直接返回
bool isContinue = true;//标记
for (int j = startIndex; j < i; j++) {
if (s[j] == s[i]) {//如果之前出现过就不用交换位置
isContinue = false;
}
}
if (!isContinue) continue;//之前出现过这个字母,就不需要交换位置
swap(s[startIndex], s[i]);//将当前字母和后边字母交换位置求全排列
f(s, startIndex + 1);//找下一个
swap(s[startIndex], s[i]);//将之前交换的字母再交换回来
}
}
};
标签:count,字符,string,练习,蓝桥,startIndex,字符串,008,cur 来源: https://blog.csdn.net/qq_51302626/article/details/121962817