90 likes | 244 Vues
This lab assignment focuses on validating strings composed of characters "a", "b", "c", and "d" that follow the specific pattern an^m b^m c^m d^n, where m, n ≥ 1. Using a stack, we process each character in the string sequentially. The algorithm involves pushing and popping characters based on defined rules to ensure compliance with the pattern. The validation checks if there are the right number of each character in the correct order, ultimately confirming if the stack is empty to determine string validity.
E N D
String Checker II Sit-in lab 4
Problem Description • Given a number of strings containing only “a”, “b”, “c”, “d” • Check each string that it follows the pattern anbmcmdn where m, n >= 1 • Use only stack OR queue
Solution • Look at pattern: anbmcmdn • Notice that it is LIFO • So we use a Stack! • Many ways of solving with a stack… here we show one way
Solution • Process one character from the input String at a time. • For example: • for(int j = 0; j < s.length(); j++){strCheck.nextChar(s.charAt(j));}
Solution • If character is “a” • We push to stack if • the stack is empty, or • the top of the stack is “a” • Else is not valid string • If character is “b” • Remember that we have a “b” (set a boolean flag) • We push to stack if • the stack is NOT empty, and • the top of the stack is “a” or “b” • Else is not valid string We need to check this so that things like “bc” will be caught
Solution • If character is “c” • We pop from the stack if • the stack is NOT empty, and • the top of the stack is “b” • Else is not valid string • If character is “d” • We pop from the stack if • the stack is NOT empty, and • the top of the stack is “a”, and • there was a “b” read in (special check for things like “ad”) • Else is not valid string
Solution • Finally, before concluding is valid string, check that stack is empty • We need this to catch things like “aaaaaabbccd” (there will be many “a” left behind in the stack)