// cut selection to clipboard void LLURLLineEditor::cut() { if( canCut() ) { // Prepare for possible rollback LLURLLineEditorRollback rollback( this ); copyEscapedURLToClipboard(); deleteSelection(); // Validate new string and rollback the if needed. BOOL need_to_rollback = ( mPrevalidateFunc && !mPrevalidateFunc( mText.getWString() ) ); if( need_to_rollback ) { rollback.doRollback( this ); LLUI::reportBadKeystroke(); } else if( mKeystrokeCallback ) { mKeystrokeCallback( this ); } } }
void DOHexEditor::cut() { if(!canCut()) return; copy(); U32 start = getProperSelectionStart(); del(start, getProperSelectionEnd() - 1, TRUE); moveCursor(start, FALSE); }
// reduce extra space: O(n) // ??? int minCut_2(string s) { int n = s.size(); vector<int> cuts(n + 1); vector<bool> canCut(n, true); cuts[n] = -1; for (int i = n - 1; i >= 0; --i) { cuts[i] = cuts[i + 1] + 1; for (int j = n - 1; j >= i; --j) { canCut[j] = (s[i] == s[j]) && (j - i < 2 || canCut[j - 1]); if (canCut[j]) { cuts[i] = min(cuts[i], cuts[j + 1] + 1); } } } return cuts[0]; }
// time : O(n^2) // space : O(n^2) int minCut(string s) { int n = s.size(); vector<int> cuts(n + 1, 0); cuts[0] = -1; vector<vector<bool> > canCut(n, vector<bool>(n, false)); for (int i = 1; i <= n; ++i) { cuts[i] = i - 1; for (int j = i; j >= 1; --j) { // j...i canCut[j - 1][i - 1] = (s[i - 1] == s[j - 1]) && (i - j < 2 || canCut[j][i - 2]); if (canCut[j - 1][i - 1]) { cuts[i] = min(cuts[i], cuts[j - 1] + 1); } } } return cuts[n]; }