模擬類貪心

題要

模擬類貪心往往需要根據題目要求,對字符串中字符不同情況進行討論,然後做分類討論,最後再看不同的情況代碼能不能綜合,總體就是總分總

鏈接: 921. 使括號有效的最少添加.

思路:

很典型的一道利用棧解決的問題,這題貪心的策略在於用自己添加最少的括號讓所有括號匹配在一起。因此我們要讓儘量多的括號能匹配在一起,所以我們對字符串中出現的括號做討論:
1.出現‘(’:直接入棧
2.出現‘)’:判斷棧頂元素是否是’(’,如果是將棧頂元素彈棧,如果不是則繼續壓棧。
最後判斷棧中還有多少個元素即可解決

代碼:

class Solution {
	public:
		int minAddToMakeValid(string S) {
			stack<char> s;
			for (int i = 0; i < S.length(); ++i)
			{
				if (S.at(i) == '(')
					s.push(S.at(i));
				else
				{
					if (!s.empty()&&s.top()!=')')
						s.pop();
					else
						s.push(S.at(i));
				}
			}
			return s.size();
		}
	};

總結:

貪心問題從構思上一般都不是太難,往往我們可以利用一些數據結構的特點來解決問題,還有就是在解決問題是,要分類討論可能出現的幾種情況再逐一解決。

類似的模擬分類討論題(不一定用的到棧)
分割平衡字符串:分類討論
劃分字母區間:分類討論再看情況能不能綜合,總分總
用戶分組:這題可以用map做映射
刪列造序:模擬題目遍歷數組即可
檸檬水找零:分類模擬題目即可
最後一塊石頭的重量:這題可以用數據結構解決的問題,用priority_queue,優先隊列,底層用大根堆實現,可以自動對數組排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章