牛客网:压缩算法

牛客网:压缩算法,第1张

这题主要是栈的应用,一开始想写递归的,写到一半发现自己写不下去了,改成直接用栈...

思路就是把字符串压到两个栈里边,一个栈记录的是字母和'|'序列,另一个栈记录的是'['和数字字符序列。

对一个输入的字符串遍历,步骤如下:

  1. 当前字符是'['或数字字符,压到栈a
  2. 当前字符是字母或'|',压到栈b
  3. 当前字符是']',进行如下 *** 作:
  • d出栈a直到遇到'[',并且记录重复次数num
  • d出栈b直到遇到'|',记录字符串序列tmp
  • 将重复num的tmp压入栈a中

思路看起来是很简单的,具体的做法其实还有一点繁琐,我这里用了一些调用的函数啥的。



现在Clion上边写了一下:

#include 
using  namespace std;
stack st,sa;
string s;
int main() {
    cin>>s;
    string res;
    for (int i = 0; i < s.size(); ++i) {
//        cout<<"ch:"<

确认结果没错就交了,然后也通过所有样例了:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return string字符串
     */
    stack st,sa;
    string compress(string str) {
    string s=str;
    string res;
    for (int i = 0; i < s.size(); ++i) {
//        cout<<"ch:"<

当然,也有一篇很好的递归的java写法可以参考:

牛客编程题-压缩算法问题-递归解法_hygge_fff的博客-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)