zoukankan      html  css  js  c++  java
  • 385 Mini Parser 迷你解析器

    Given a nested list of integers represented as a string, implement a parser to deserialize it.
    Each element is either an integer, or a list -- whose elements may also be integers or other lists.
    Note: You may assume that the string is well-formed:
        String is non-empty.
        String does not contain white spaces.
        String contains only digits 0-9, [, - ,, ].
    Example 1:
    Given s = "324",
    You should return a NestedInteger object which contains a single integer 324.
    Example 2:
    Given s = "[123,[456,[789]]]",
    Return a NestedInteger object containing a nested list with 2 elements:
    1. An integer containing value 123.
    2. A nested list containing two elements:
        i.  An integer containing value 456.
        ii. A nested list with one element:
             a. An integer containing value 789.
    详见:https://leetcode.com/problems/mini-parser/description/

    C++:

    /**
     * // This is the interface that allows for creating nested lists.
     * // You should not implement it, or speculate about its implementation
     * class NestedInteger {
     *   public:
     *     // Constructor initializes an empty nested list.
     *     NestedInteger();
     *
     *     // Constructor initializes a single integer.
     *     NestedInteger(int value);
     *
     *     // Return true if this NestedInteger holds a single integer, rather than a nested list.
     *     bool isInteger() const;
     *
     *     // Return the single integer that this NestedInteger holds, if it holds a single integer
     *     // The result is undefined if this NestedInteger holds a nested list
     *     int getInteger() const;
     *
     *     // Set this NestedInteger to hold a single integer.
     *     void setInteger(int value);
     *
     *     // Set this NestedInteger to hold a nested list and adds a nested integer to it.
     *     void add(const NestedInteger &ni);
     *
     *     // Return the nested list that this NestedInteger holds, if it holds a nested list
     *     // The result is undefined if this NestedInteger holds a single integer
     *     const vector<NestedInteger> &getList() const;
     * };
     */
    class Solution {
    public:
        NestedInteger deserialize(string s) {
            if(s.empty())
            {
                return NestedInteger();
            }
            if(s[0]!='[')
            {
                return NestedInteger(stoi(s));
            }
            if(s.size()<=2)
            {
                return NestedInteger();
            }
            NestedInteger res;
            int cnt=0;
            int start=1;
            for(int i=1;i<s.size();++i)
            {
                if(cnt==0&&s[i]==','||i==s.size()-1)
                {
                    res.add(deserialize(s.substr(start,i-start)));
                    start=i+1;
                }
                else if(s[i]=='[')
                {
                    ++cnt;
                }
                else if(s[i]==']')
                {
                    --cnt;
                }
            }
            return res;
        }
    };
    

     参考:https://www.cnblogs.com/grandyang/p/5771434.html

  • 相关阅读:
    tree related problems (update continuously)
    [单元測试]_[VC2010使用gtest单元測试入门]
    generate alphanumeric serial number
    UiAutomator源代码分析之获取控件信息
    Fckeditor常见漏洞的挖掘与利用整理汇总
    AsyncAwait
    .Net异步编程知多少
    ParameterizedThreadStart task
    AsyncAwait 学习
    8天玩转并行开发——第八天 用VS性能向导解剖你的程序
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8849287.html
Copyright © 2011-2022 走看看