สมมติว่าเรามีสตริง S ที่มี n ตัวอักษร ตัวอักษรจะเป็น '+' หรือ '-' มีกองหิน n ครั้งเราเอาหินออกหรือใส่เข้าไป กองหินไม่ว่างก่อนการเอาหินออกทุกครั้ง เราต้องหาจำนวนหินน้อยที่สุดที่เป็นไปได้ในกองหลังดำเนินการทั้งหมด ถ้าเอาหินในครั้งที่ i S[i] = "-" ถ้าใส่ S[i] = "+"
เช่น ถ้าอินพุตคือ S = "++-++" เอาต์พุตจะเป็น 3 ถ้าเริ่มต้น 0 ลูกหลังดำเนินการจะได้ 3 ลูก
ขั้นตอนการแก้ปัญหา
n := ขนาดของ S
for i := 0 ถึง n-1:
res := (ถ้า S[i] == '-' แล้ว max(res - 1, 0) มิฉะนั้น res + 1)
return res
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(string S) {
int n = S.size(), res = 0;
for (int i = 0; i < n; i++)
res = (S[i] == '-') ? max(res - 1, 0) : res + 1;
return res;
}
int main() {
string S = "++-++";
cout << solve(S) << endl;
}
อินพุต
"++-++"
เอาต์พุต
3