LeeCode-刷题日记-Day20
290. 单词规律
思路:双哈希表,用pattern的字母映射到s的单词,再用s 的单词映射到pattern的字母。如果有一个不满足则返回不成立。
/**
* @param {string} pattern
* @param {string} s
* @return {boolean}
*/
var wordPattern = function(pattern, s) {
const word2ch = new Map();
const ch2word = new Map();
const words = s.split(' ');
if(pattern.length!==words.length)
return false;
for(const [i,word] of words.entries()){
const ch = pattern[i];
if(word2ch.has(word)&&word2ch.get(word)!==ch || ch2word.has(ch)&&ch2word.get(ch)!==word) return false;
word2ch.set(word,ch);
ch2word.set(ch,word);
}
return true;
};
763. 划分字母区间
第一次遍历整个字符串,获得每个字符在当前字符串中最后一次出现的位置。
第二次遍历字符串,标记一个end,让end等于当前字符对应的最后位置,如果当i等于end的时候,此处就是分割点。将其长度end-start+1加入数组中。
/**
* @param {string} s
* @return {number[]}
*/
var partitionLabels = function(s) {
let last = new Array(26).fill(0);
for(let i =0;i<s.length;i++){
last[s.charCodeAt(i)-97]=i;
}
let pattern=[];
let start=0,end=0;
for(let i =0;i<s.length;i++){
end=Math.max(end,last[s.charCodeAt(i)-97]);
if(i===end){
pattern.push(end-start+1);
start=end+1;
}
}
return pattern;
};
- 本文链接:https://archer-lan.github.io/2023/11/20/LeeCode-%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0-Day20/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。