[leetcode]問題解答と解説。125. Valid Palindrome [JavaScript]
皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます
私はある決意をして今挑んでいます。
モチベーションを保つためだけにこれをやっています。
では今日のleetCode。
【125. Valid Palindrome】の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。
※下にある自分のコードは自分で設けた制限時間内に書けたところまです。
これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。
[leetcode] 125. Valid Palindrome ルール
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
ざっくり和訳
フレーズは、すべての大文字を小文字に変換し、英数字以外のすべての文字を削除した後、同じ前方と後方を読み取る場合、回文です。 英数字には文字と数字が含まれます。
文字列sを指定すると、回文の場合はtrueを返し、それ以外の場合はfalseを返します。
exampleは実際の問題ページを見てください
Example 1:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Example 2:
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
Example 3:
Input: s = " "
Output: true
Explanation: s is an empty string "" after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.
[leetcode]125. Valid Palindrome 問題ページ
[leetcode]125. Valid Palindrome
my code is not good(clear)
ちょっと微調整している..
function isPalindrome(s: string): boolean {
if(s === " " || s === ".") return true
const s1 = s.toLowerCase()
const search = s1.replace(/[^a-zA-Z]+/g, "")
if(search.length <= 2) return false
const flo = search.length / 2
const iss = flo % 2 === 0
if(iss){
return false
}
const mid = Math.floor(flo) + 1
let first = 0;
let last = search.length -1;
while(first < last){
if(search.substr(first, 1) !== search.substr(last, 1)){
return false
}
first++
last--
}
return true
};
[leetcode]125. Valid Palindrome。discussの中の一つの解答例
数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね
JavaScriptでfilterされている、discussはこちらから
これが違う実装
leetCode 125. Valid Palindrome
1
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(input) {
var start = 0
var end = input.length - 1
while (start < end) {
var s = input.charCodeAt(start)
var e = input.charCodeAt(end) // codeを使う
if (!isLetter(s)) {
start++
continue
}
if (!isLetter(e)) {
end--
continue
}
if (toLowerCase(s) !== toLowerCase(e)) {
return false
}
start++
end--
}
return true
};
var isLetter = function(code) {
if (((code >= 48) && (code <= 57)) // numbers。ここら辺使うの手練れ感すごいな...
|| ((code >= 65) && (code <= 90)) // uppercase
|| ((code >= 97) && (code <= 122))) { // lowercase
return true
}
else {
return false
}
}
var toLowerCase = function(code) {
if (code >= 65 && code <= 90) {
return code + 32
}
else {
return code
}
}
こっちの方がやりたかったことに近い
https://leetcode.com/problems/valid-palindrome/discuss/554098/Simple-JavaScript-soluton
const isPalindrome = s => {
s = s.toLowerCase().replace(/[^a-z0-9]/gi,'');
for (let i = 0, j = s.length - 1; i <= j; i++, j--) { // nice!!!
if (s.charAt(i) !== s.charAt(j)) return false;
}
return true;
}
var isPalindrome = function(s) {
var cleaned = s.replace(/\W/g, "");
var reversedAndCleaned = cleaned
.split("")
.reverse()
.join("");
return cleaned.toLowerCase() == reversedAndCleaned.toLowerCase();
};
[leetcode]125. Valid Palindromeをやってみて感想
- /[^a-z0-9]/gi