[ https://issues.apache.org/jira/browse/GROOVY-11655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17950203#comment-17950203 ]
John Dong commented on GROOVY-11655: ------------------------------------ a rust version use String: {code:java} struct TextEditor { left: String, right: String, } impl TextEditor { fn new() -> Self { TextEditor { left: String::new(), right: String::new(), } } fn add_text(&mut self, text: String) { self.left.push_str(&text); } fn delete_text(&mut self, k: i32) -> i32 { let k = k.min(self.left.len() as i32) as usize; self.left.truncate(self.left.len() - k); k as i32 } fn cursor_left(&mut self, k: i32) -> String { let k = k.min(self.left.len() as i32) as usize; for _ in 0..k { if let Some(c) = self.left.pop() { self.right.push(c); } } self.get_last_10_chars() } fn cursor_right(&mut self, k: i32) -> String { let k = k.min(self.right.len() as i32) as usize; for _ in 0..k { if let Some(c) = self.right.pop() { self.left.push(c); } } self.get_last_10_chars() } fn get_last_10_chars(&self) -> String { let len = self.left.len(); self.left[len.saturating_sub(10)..].to_string() } } {code} > Create extension method to make StringBuilder like a stack > ---------------------------------------------------------- > > Key: GROOVY-11655 > URL: https://issues.apache.org/jira/browse/GROOVY-11655 > Project: Groovy > Issue Type: New Feature > Reporter: John Dong > Priority: Major > > for leetcode problem: > [https://leetcode.com/problems/design-a-text-editor/description/] > the java code below, suppose StringBuilder to be a contain of chars , > meanwhile as a stack. > > {code:java} > class TextEditor { > private final StringBuilder left = new StringBuilder(); > private final StringBuilder right = new StringBuilder(); > public void addText(String text) { > left.append(text); > } > public int deleteText(int k) { > k = Math.min(k, left.length()); > left.setLength(left.length() - k); > return k; > } > public String cursorLeft(int k) { > while (k > 0 && !left.isEmpty()) { > right.append(left.charAt(left.length() - 1)); > left.setLength(left.length() - 1); > k--; > } > return text(); > } > public String cursorRight(int k) { > while (k > 0 && !right.isEmpty()) { > left.append(right.charAt(right.length() - 1)); > right.setLength(right.length() - 1); > k--; > } > return text(); > } > private String text() { > > return left.substring(Math.max(left.length() - 10, 0)); > } > } > {code} > > -- This message was sent by Atlassian Jira (v8.20.10#820010)