Open Zheaoli opened 2 years ago
class Solution {
public String makeLargestSpecial(String s) {
//参考合法的括号,只有(),(()),(()())三种形式,三种括号可以互相交换位置保持合法;
//而(()())去掉外层()后,内部为两个(),所以可以递归解决
//对于特殊序列s,根据条件2,可以拆分为(1 + sub + 0)的形式,若sub也为特殊序列,则可以递归调用处理
//从左到右遍历s,将拆分出来的每一个特殊子序列进行降序排序然后相加即为结果
int lo = 0, hi = 0, n = s.length(), cnt = 0;
if (n == 0 || s.charAt(0) == 0) {
return s; //s不为特殊序列,直接返回
}
List<String> list = new ArrayList<>();
for (; hi < n; hi++) {
cnt += s.charAt(hi) == '1' ? 1 : -1;
if (cnt == 0) {
String sub = "1" + makeLargestSpecial(s.substring(lo + 1, hi)) + "0";
list.add(sub);
lo = hi + 1;
}
}
list.sort(Comparator.reverseOrder());
StringBuilder sb = new StringBuilder();
for (String sub : list) {
sb.append(sub);
}
return sb.toString();
}
}
WeChat: Saraad
/*
* @lc app=leetcode id=283 lang=typescript
*
* [283] Move Zeroes
*/
// @lc code=start
/**
Do not return anything, modify nums in-place instead.
*/
function moveZeroes(nums: number[]): void {
let pointerA = 0;
for (let pointerB = 0; pointerB < nums.length; pointerB++) {
// if nums[pointerB] not equals to zero, then swap nums[pointerA] and nums[pointerB]
// and increase both pointerA and pointerB
// if nums[pointerB] equals to zero, then do nothing about pointerA
// and increase pointerB
// make sure pointerA always point to the leftmost zero
if (nums[pointerB]) {
pointerA !== pointerB && ([nums[pointerA], nums[pointerB]] = [nums[pointerB], nums[pointerA]]);
pointerA++;
}
}
};
// @lc code=end
微信id: 弘树 来自 vscode 插件
2022-08-08