开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
题目描述
句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。
- 例如,
"Hello World"、"HELLO"、"hello world hello world"都是符合要求的句子。
单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。
如果句子满足下述全部条件,则认为它是一个 回环句 :
- 单词的最后一个字符和下一个单词的第一个字符相等。
- 最后一个单词的最后一个字符和第一个单词的第一个字符相等。
例如,"leetcode exercises sound delightful"、"eetcode"、"leetcode eats soul" 都是回环句。然而,"Leetcode is cool"、"happy Leetcode"、"Leetcode" 和 "I like Leetcode" 都 不 是回环句。
给你一个字符串 sentence ,请你判断它是不是一个回环句。如果是,返回 true **;否则,返回 false 。
示例 1:
输入: sentence = "leetcode exercises sound delightful"
输出: true
解释: 句子中的单词是 ["leetcode", "exercises", "sound", "delightful"] 。
- leetcode 的最后一个字符和 exercises 的第一个字符相等。
- exercises 的最后一个字符和 sound 的第一个字符相等。
- sound 的最后一个字符和 delightful 的第一个字符相等。
- delightful 的最后一个字符和 leetcode 的第一个字符相等。
这个句子是回环句。
示例 2:
输入: sentence = "eetcode"
输出: true
解释: 句子中的单词是 ["eetcode"] 。
- eetcode 的最后一个字符和 eetcode 的第一个字符相等。
这个句子是回环句。
示例 3:
输入: sentence = "Leetcode is cool"
输出: false
解释: 句子中的单词是 ["Leetcode", "is", "cool"] 。
- Leetcode 的最后一个字符和 is 的第一个字符 不 相等。
这个句子 不 是回环句。
提示:
1 <= sentence.length <= 500sentence仅由大小写英文字母和空格组成sentence中的单词由单个空格进行分隔- 不含任何前导或尾随空格
思路分析
首先我们要先理解一下题意,题目要求我们判断给出的句子是不是一个回文句,回文句需要满足以下条件:
- 单词的最后一个字符和下一个单词的第一个字符相等。
- 最后一个单词的最后一个字符和第一个单词的第一个字符相等。
句子中的每一个单词都用空格隔开,所以我们需要先将所有单词分隔提取出来,我们可以直接使用JavaScript中的split函数来对字符串进行分隔,得到一个单词数组:
sentence = sentence.split(' ');
依次判断当前单词的最后一个字母与下一个单词的第一个字母是否相同,当当前单词是最后一个单词的时候,我们需要进行循环判断,及最后一个单词的下一个单词是第一个单词,所以我们需要判断最后一个单词的最后一个字母与第一个单词的第一个字母是否相同:
for(let i = 0; i < sentence.length; i++){
const next = sentence[i + 1] || sentence[0];
if(sentence[i][sentence[i].length - 1] != next[0]) return false;
}
AC代码
完整代码如下:
/**
* @param {string} sentence
* @return {boolean}
*/
var isCircularSentence = function(sentence) {
sentence = sentence.split(' ');
for(let i = 0; i < sentence.length; i++){
const next = sentence[i + 1] || sentence[0];
if(sentence[i][sentence[i].length - 1] != next[0]) return false;
}
return true;
};
说在后面
本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。