53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| /**
 | |
|  * [2024] Maximize the Confusion of an Exam
 | |
|  */
 | |
| pub struct Solution {}
 | |
| 
 | |
| // submission codes start here
 | |
| 
 | |
| impl Solution {
 | |
|     pub fn max_consecutive_answers(answer_key: String, k: i32) -> i32 {
 | |
|         let str: Vec<char> = answer_key.chars().collect();
 | |
| 
 | |
|         Self::max_consecutive_char(&str, k, 'T').max(Self::max_consecutive_char(&str, k, 'F'))
 | |
|     }
 | |
| 
 | |
|     fn max_consecutive_char(str: &Vec<char>, k: i32, c: char) -> i32 {
 | |
|         let n = str.len();
 | |
|         let mut result = 0;
 | |
| 
 | |
|         let (mut left, mut sum) = (0, 0);
 | |
|         for right in 0..n {
 | |
|             sum += match str[right] == c {
 | |
|                 true => 0,
 | |
|                 false => 1,
 | |
|             };
 | |
| 
 | |
|             while sum > k {
 | |
|                 sum -= match str[left] == c {
 | |
|                     true => 0,
 | |
|                     false => 1,
 | |
|                 };
 | |
|                 left += 1;
 | |
|             }
 | |
| 
 | |
|             result = result.max(right - left + 1);
 | |
|         }
 | |
| 
 | |
|         result as i32
 | |
|     }
 | |
| }
 | |
| 
 | |
| // submission codes end
 | |
| 
 | |
| #[cfg(test)]
 | |
| mod tests {
 | |
|     use super::*;
 | |
| 
 | |
|     #[test]
 | |
|     fn test_2024() {
 | |
|         assert_eq!(4, Solution::max_consecutive_answers("TTFF".to_owned(), 2));
 | |
|         assert_eq!(3, Solution::max_consecutive_answers("TFFT".to_owned(), 1));
 | |
|     }
 | |
| }
 |