leetcode-125:検証文字列
5953 ワード
LC検証文字列題 解題: 方法一:スクリーニング+判断 方法2:元の文字列で を直接判断する
タイトル
タイトルリンクには文字列が指定されており、エコー列であるかどうかを検証し、アルファベットと数字文字のみを考慮し、アルファベットの大文字と小文字を無視することができます.説明:この問題では、空の文字列を有効な文字列として定義します.
例1:
例2:
問題を解く:
方法一:選別+判断
方法2:元の文字列で直接判断する
元の文字列ssに直接ダブルポインタを使用します.いずれかのポインタを移動する場合は、1つのアルファベットまたは数字文字、または2つのポインタが重なるまで、別のポインタの方向に移動する必要があります.すなわち,ポインタを次のアルファベット文字または数字文字に移動するたびに,この2つのポインタが指す文字が同じかどうかを判断する.
これらの方法はいずれも
タイトル
タイトルリンクには文字列が指定されており、エコー列であるかどうかを検証し、アルファベットと数字文字のみを考慮し、アルファベットの大文字と小文字を無視することができます.説明:この問題では、空の文字列を有効な文字列として定義します.
例1:
: "A man, a plan, a canal: Panama"
: true
例2:
: "race a car"
: false
問題を解く:
方法一:選別+判断
class Solution:
def isPalindrome(self, s: str) -> bool:
sgood = "".join(ch.lower() for ch in s if ch.isalnum())
return sgood == sgood[::-1]
方法2:元の文字列で直接判断する
元の文字列ssに直接ダブルポインタを使用します.いずれかのポインタを移動する場合は、1つのアルファベットまたは数字文字、または2つのポインタが重なるまで、別のポインタの方向に移動する必要があります.すなわち,ポインタを次のアルファベット文字または数字文字に移動するたびに,この2つのポインタが指す文字が同じかどうかを判断する.
class Solution:
def isPalindrome(self, s: str) -> bool:
n = len(s)
left, right = 0, n - 1
while left < right:
while left < right and not s[left].isalnum():
left += 1
while left < right and not s[right].isalnum():
right -= 1
if left < right:
if s[left].lower() != s[right].lower():
return False
left, right = left + 1, right - 1
return True
これらの方法はいずれも
isalnum()
の方法を用いており,これを用いなければord()
を用いてASCIIコードに変換し,chr()
を用いてASCIIコードを文字に変換し,手動で小文字と数字に変換する必要がある.