Algorithm
本周选择的算法题是:Valid Palindrome。
规则
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama"
Output: true
Example 2:
Input: "race a car"
Output: false
Constraints:
s
consists only of printable ASCII characters.
Solution
非常 Python 的解法:
class Solution:
def isPalindrome(self, s: str) -> bool:
s = [letter.lower() for letter in s if letter.isalnum()]
return s == s[::-1]
优化版:
class Solution:
def isPalindrome(self, s: str) -> bool:
s = [letter.lower() for letter in s if letter.isalnum()]
for i in range(len(s)//2):
if s[i] != s[~i]: return False
return True
简写版:
class Solution:
def isPalindrome(self, s: str) -> bool:
s = [letter.lower() for letter in s if letter.isalnum()]
return all([s[i]==s[~i] for i in range(len(s)//2)])
Review
这篇文章的作者认为 App Store 将会在未来 10 年里消失,而 Web 平台会成为最终的获胜者,其论据也有一定的说服力,主要分为以下几个方面:
- PWA 技术的成熟 - 依托于 PWA,现在 Web App 也可以做到 Native App 的体验,甚至很多情况下用户无法感知出差别
- App Store 等商店的抽成较高 - 主流商店有 30% 甚至更高的抽成,最近几年已有越来越多的厂商感到不满,Web App 由于绕过了商店可以避免这部分的佣金
- 发布效率 - 技术上,JavaScript 的技术栈可以跨平台,而 Native 开发只能在特定平台上进行,开发者需要写多次代码,并且需要保证多端一致性;部署上,Native App 需要经过审核后才能上架,通常需要 24-72 小时,加长了软件部署的周期,而 Web App 可以即时部署
- 不需要下载 - 用户可以通过 URL 访问 Web App 直接使用服务,不用等待下载,而且 Native App 不能被 Google 等搜索引擎索引,开发者仍然需要制作一个 Web 页面以进行 SEO
- 竞争不公平 - Apple 和 Google 为开发者提供了平台,自己也在平台内和开发者竞争,开发者处于不公开的竞争环境中
作者还做了一张很直观的图比较两者:
10 年前苹果在 Web 技术日益发展壮大时凭借精良的用户体验硬生生将行业拉回到了 Native,相比过去,今天的 Web 技术已经具备了和 Native 保持一致体验的能力,未来就拭目以待吧。
Tip
无意中发现借助 Shortcuts 可以实现“当打开 Kindle or 微信读书时,自动开启勿扰模式”,太赞了👍美中不足的是要手动关闭,想来也是,要实现自动关闭的话得读取勿扰模式的相关设置,比如有没有设置自动开启,自动开启的时机是什么,挺麻烦的,这就不是一个 AOP 层可以实现的东西了。