zoukankan      html  css  js  c++  java
  • leetcode ----Trie/stack专题

    一:Implement Trie (Prefix Tree)

    题目:

    Implement a trie with insertsearch, and startsWith methods.

    Note:
    You may assume that all inputs are consist of lowercase letters a-z.

    分析:此题是典型的trie树。能够參见:http://blog.csdn.net/lu597203933/article/details/44227431

    代码:

    class TrieNode {
    public:
        // Initialize your data structure here.
        TrieNode() {
            for(int i = 0; i < 26; i++)
                next[i] = NULL;
            isString = false;
        }
        TrieNode *next[26];
        bool isString;
    };
    
    class Trie {
    public:
        Trie() {
            root = new TrieNode();
            
        }
    
        // Inserts a word into the trie.
        void insert(string s) {
            TrieNode *p = root;
            for(int i = 0; i < s.size(); i++){
                if(p->next[s[i]-'a'] == NULL){
                    p->next[s[i]-'a'] = new TrieNode();
                }
                p = p->next[s[i]-'a'];
            }
            p->isString = true;
        }
    
        // Returns if the word is in the trie.
        bool search(string key) {
            TrieNode *p = root;
            for(int i = 0; i < key.size(); i++){
                if(p == NULL) return false;
                p = p->next[key[i]-'a'];
            }
            if(p == NULL || p->isString == false) return false;
            return true;
            
        }
    
        // Returns if there is any word in the trie
        // that starts with the given prefix.
        bool startsWith(string prefix) {
            TrieNode *p = root;
            for(int i = 0; i <= prefix.size(); i++){
                if(p == NULL) return false;
                p = p->next[prefix[i]-'a'];
            }
            return true;
        }
    
    private:
        TrieNode* root;
    };
    
    // Your Trie object will be instantiated and called as such:
    // Trie trie;
    // trie.insert("somestring");
    // trie.search("key");

    二:Basic Calculator

    题目:

    Implement a basic calculator to evaluate a simple expression string.

    The expression string may contain open ( and closing parentheses ), the plus + or minus sign -non-negative integers and empty spaces .

    You may assume that the given expression is always valid.

    Some examples:

    "1 + 1" = 2
    " 2-1 + 2 " = 3
    "(1+(4+5+2)-3)+(6+8)" = 23
    分析:这道题能够将括号中面的看做是负负得正,这样用sign记录当前数字前面得符号。是+为1,是-为-1,。然后还要它所在的括号深度的符号,用stack来标记。

    同一时候num = num *10 + c - '0'。, 也给出了正向计算一个字符串比方“12342”的数值方法。。。

    class Solution {
    public:
        int calculate(string s) {
    		int sign = 1;         // 当前元素前是+还是-
    		stack<char> st;       // 主要是为了考虑括号的深度, 括号前面是+ 则为1否则为0
    		st.push(1); 
    		int ans = 0;
    		int tmp = 0;
    		for(int i = 0; i < s.size(); i++){
    			char c = s[i];
    			if(isdigit(c)){    // 假设是数字  则保存起来
    				tmp = tmp * 10 + s[i] - '0'; 
    			}
    			else if(c == '-' || c == '+'){  
    				ans += tmp * sign * st.top();   // 由当前符号和括号外面的符号两者决定!
    				sign = (c=='+' ? 1 : -1);
    				tmp = 0;
    			}else if(c == '('){
    				st.push(sign*st.top());   // 当前括号内元素的符号由其前面的各个外层括号符号决定
    				sign = 1;   // 括号后面首个是+
    			}else if(c ==')'){
    				ans += tmp *sign * st.top();
    				st.pop();
    				tmp = 0;
    				sign = 1;
    			}
    		}
    		ans += tmp * sign * st.top();
            return ans;
            
        }
    };


  • 相关阅读:
    Android源码服务专家(申明:来源于网络)
    Android超精准计步器开发-Dylan计步(申明:来源于网路)
    eclipse中一个项目引用另一个项目的方法(申明:来源于网络)
    javaweb(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb(二十六)——jsp简单标签标签库开发(二)
    javaweb(二十四)——jsp传统标签开发
    javaweb(二十三)——jsp自定义标签开发入门
    javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    javaweb(二十一)——JavaWeb的两种开发模式
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7191171.html
Copyright © 2011-2022 走看看