leetcode 394. Decode String

1人阅读 评论(0) 收藏 举报
分类:

leetcode 394. Decode String

题意:解码字符串,看输入输出就能懂了。

s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

用人的思维方式来做,挺复杂的。

还好有栈这种神奇的数据结构。

碰到'[',就把当前状态放在栈里,

碰到']',就把栈里的东西拿出来更新。

class Solution {
public:
	string decodeString(string s) {
		string ans = "";
		int num = 0;
		stack<int> s_num;
		stack<string> s_str;
		for (int i = 0; i<s.size(); i++)
		{
			if (s[i] >= '0' && s[i] <= '9')
				num = num * 10 + s[i] - '0';
			else if (s[i] == '[')
			{
				s_num.push(num);
				s_str.push(ans);
				num = 0;
				ans.clear();
			}
			else if (s[i] == ']')
			{
				int k = s_num.top();
				s_num.pop();
				string temp = s_str.top();
				for (int j = 0; j<k; j++)
					s_str.top() += ans;
				ans = s_str.top();
				s_str.pop();
			}
			else
				ans += s[i];
		}
		return s_str.empty() ? ans : s_str.top();
	}
	
};

对这种嵌套的东西,栈还是很好用啊!

还有一个方法是递归,这个东西想到很难,理解很容易啊!

class Solution {
public:
    string decodeString(string s) {
        int i = 0;
        return decode(s, i);
    }
    string decode(string s, int& i) {
        string res = "";
        int n = s.size();
        while (i < n && s[i] != ']') {
            if (s[i] < '0' || s[i] > '9') {
                res += s[i++];
            } else {
                int cnt = 0;
                while (i < n && s[i] >= '0' && s[i] <= '9') {
                    cnt = cnt * 10 + s[i++] - '0';
                }
                ++i;
                string t = decode(s, i);
                ++i;
                while (cnt-- > 0) {
                    res += t;
                }
            }
        }
        return res;
    }
};

查看评论

[leetcode] 394. Decode String 解题报告

题目链接: https://leetcode.com/problems/decode-string/ Given an encoded string, return it's decoded...
  • qq508618087
  • qq508618087
  • 2016-09-05 12:19:56
  • 2924

【leetcode】394. Decode String

一、题目描述 Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_...
  • xiaoquantouer
  • xiaoquantouer
  • 2016-09-19 16:07:33
  • 968

Leetcode 394. Decode String 字符串解码 解题报告

1 解题思想意思是在字符串当中,有一个特殊的格式 — k[S],遇到这种状况,需要把S重复k次,注意是可以嵌套的在这次解题当中,我是使用了栈的方式,去解决这个问题。分别使用了一个全局的已解码的字符串...
  • MebiuW
  • MebiuW
  • 2016-09-06 12:19:40
  • 3963

LeetCode394 Decode String java solution

题目链接: https://leetcode.com/problems/decode-string/ 点击打开链接 题目要求: Given an encoded string, r...
  • sinat_32547403
  • sinat_32547403
  • 2016-12-26 11:52:42
  • 392

LeetCode 394. Decode String 解题报告

LeetCode 394. Decode String 解题报告
  • camellhf
  • camellhf
  • 2016-10-27 21:01:20
  • 540

LeetCode—394. Decode String

Decode String思路:逐个char解析即可 GitHub地址:https://github.com/corpsepiges/leetcode 点此进入如果可以...
  • corpsepiges
  • corpsepiges
  • 2016-09-06 10:59:39
  • 546

LeetCode-394. Decode String (JAVA)解码字符串

LeetCode-394. Decode String (JAVA)解码字符串
  • mine_song
  • mine_song
  • 2017-04-30 20:37:56
  • 620

394. Decode String 难度:medium

题目: Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_str...
  • luoyingmin
  • luoyingmin
  • 2017-01-04 20:37:02
  • 97

[394]Decode String

【题目描述】 Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_...
  • sadjuno
  • sadjuno
  • 2016-09-16 17:46:54
  • 584
    个人资料
    持之以恒
    等级:
    访问量: 8361
    积分: 585
    排名: 9万+
    最新评论