2124、检查是否所有 A 都在 B 之前 | 算法300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(2124)检查是否所有 A 都在 B 之前
一 题目描述
二 解法总览(思维导图)
三 全部解法
1 方案1
1)代码:
// 方案1 “排序、对比法”。 // 思路: // 1)将 s 按字母升序排列,得到字符串 sSort 。 // 2)返回结果 sSort === s 。 var checkString = function(s) { // 1)将 s 按字母升序排列,得到字符串 sSort 。 const sSort = s.split('').sort((a, b) => a.localeCompare(b)).join(''); // 2)返回结果 sSort === s 。 return sSort === s; };
2 方案2
1)代码:
// 方案2 “双指针法”。 // 思路: // 1)状态初始化,left = 0, right = l - 1, resBool = true 。 // 2)当 left < right 时,下标 left、right 不断往中间靠。 // 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。 // 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。 // 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。 // 3)返回结果 resBool 。 var checkString = function(s) { // 1)状态初始化,left = 0, right = l - 1, resBool = true 。 const l = s.length; let left = 0, right = l - 1, resBool = true; // 2)当 left < right 时,下标 left、right 不断往中间走。 while (left < right) { const leftVal = s[left], rightVal = s[right]; // 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。 if (leftVal === 'a') { left++; } // 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。 if (rightVal === 'b') { right--; } // 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。 if (leftVal !== 'a' && rightVal !== 'b') { resBool = false; break; } } // 3)返回结果 resBool 。 return resBool; }
3 方案3
1)代码:
// 方案3 “问题等价 - 转化法”。 // 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。 var checkString = function(s) { return s.includes('ba') === false; }
4 方案4
1)代码:
// 方案4 “问题等价 - 转化法(正则实现,初步看、速度会比方案3快好些~)”。 // 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。 var checkString = function(s) { const reg = /ba/; return reg.test(s) === false; }
四 资源分享 & 更多
1 历史文章 - 总览
2 博主简介
码农三少 ,一个致力于编写 极简、但齐全题解(算法) 的博主。
专注于 一题多解、结构化思维 ,欢迎一起刷穿 LeetCode ~