句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。
- 例如,
"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 <= 500
sentence
仅由大小写英文字母和空格组成sentence
中的单词由单个空格进行分隔- 不含任何前导或尾随空格
方法一:模拟
根据题意模拟即可。
时间复杂度
class Solution:
def isCircularSentence(self, sentence: str) -> bool:
sentence = sentence.split()
return all(s[0] == sentence[i - 1][-1] for i, s in enumerate(sentence))
class Solution {
public boolean isCircularSentence(String sentence) {
if (sentence.charAt(0) != sentence.charAt(sentence.length() - 1)) {
return false;
}
String[] ss = sentence.split(" ");
for (int i = 1; i < ss.length; ++i) {
if (ss[i].charAt(0) != ss[i - 1].charAt(ss[i - 1].length() - 1)) {
return false;
}
}
return true;
}
}
class Solution {
public:
bool isCircularSentence(string sentence) {
if (sentence[0] != sentence[sentence.size() - 1]) return false;
istringstream is(sentence);
vector<string> ss;
string s;
while (is >> s) ss.emplace_back(s);
for (int i = 1; i < ss.size(); ++i) {
if (ss[i][0] != ss[i - 1][ss[i - 1].size() - 1]) {
return false;
}
}
return true;
}
};
func isCircularSentence(sentence string) bool {
if sentence[0] != sentence[len(sentence)-1] {
return false
}
ss := strings.Split(sentence, " ")
for i := 1; i < len(ss); i++ {
if ss[i][0] != ss[i-1][len(ss[i-1])-1] {
return false
}
}
return true
}
var isCircularSentence = function (sentence) {
const words = sentence.split(' ');
const post = words[0].charCodeAt(0);
let prev = words[0].charCodeAt(words[0].length - 1);
const n = words.length;
for (let i = 1; i < n; i++) {
let cur = words[i];
if (cur.charCodeAt(0) !== prev) {
return false;
}
prev = cur.charCodeAt(cur.length - 1);
}
return post === prev;
};
function isCircularSentence(sentence: string): boolean {
const ss = sentence.split(' ');
const n = ss.length;
if (ss[0][0] !== ss[n - 1][ss[n - 1].length - 1]) {
return false;
}
for (let i = 0; i < n - 1; i++) {
if (ss[i][ss[i].length - 1] !== ss[i + 1][0]) {
return false;
}
}
return true;
}
impl Solution {
pub fn is_circular_sentence(sentence: String) -> bool {
let ss: Vec<String> = sentence.split(' ').map(String::from).collect();
let n = ss.len();
if ss[0].as_bytes()[0] != ss[n - 1].as_bytes()[ss[n - 1].len() - 1] {
return false;
}
for i in 1..n {
if ss[i - 1].as_bytes()[ss[i - 1].len() - 1] != ss[i].as_bytes()[0] {
return false;
}
}
return true;
}
}