diff --git a/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name.go b/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name.go index 69b27ea54..8c28a2bf9 100644 --- a/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name.go +++ b/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name.go @@ -7,20 +7,18 @@ func isLongPressedName(name string, typed string) bool { if (len(name) == 0 && len(typed) != 0) || (len(name) != 0 && len(typed) == 0) { return false } - - j := 0 - for i := 0; i < len(name); i++ { - if j < len(typed) && name[i] == typed[j] { + i, j := 0, 0 + for i < len(name) && j < len(typed) { + if name[i] != typed[j] { + return false + } + for i < len(name) && j < len(typed) && name[i] == typed[j] { + i++ + j++ + } + for j < len(typed) && typed[j] == typed[j-1] { j++ - continue - } else { - if i > 0 && j < len(typed) && name[i-1] == typed[j] { - j++ - i-- - } else { - return false - } } } - return true + return i == len(name) && j == len(typed) } diff --git a/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name_test.go b/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name_test.go index f374c7979..d2ae66626 100644 --- a/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name_test.go +++ b/leetcode/0925.Long-Pressed-Name/925. Long Pressed Name_test.go @@ -32,6 +32,21 @@ func Test_Problem925(t *testing.T) { ans925{true}, }, + { + para925{"alex", "alexxr"}, + ans925{false}, + }, + + { + para925{"alex", "alexxxxr"}, + ans925{false}, + }, + + { + para925{"alex", "alexxxxx"}, + ans925{true}, + }, + { para925{"saeed", "ssaaedd"}, ans925{false}, diff --git a/leetcode/0925.Long-Pressed-Name/README.md b/leetcode/0925.Long-Pressed-Name/README.md index 95dfbaf51..1b588febf 100644 --- a/leetcode/0925.Long-Pressed-Name/README.md +++ b/leetcode/0925.Long-Pressed-Name/README.md @@ -53,8 +53,8 @@ Note: ## 解题思路 -这一题也可以借助滑动窗口的思想。2 个字符串一起比较,如果遇到有相同的字符串,窗口继续往后滑动。直到遇到了第一个不同的字符,如果遇到两个字符串不相等的情况,可以直接返回 false。具体实现见代码。 - +- 这一题也可以借助滑动窗口的思想。2 个字符串一起比较,如果遇到有相同的字符串,窗口继续往后滑动。直到遇到了第一个不同的字符,如果遇到两个字符串不相等的情况,可以直接返回 false。具体实现见代码。 +- 这一题的测试用例修改过一次,需要注意我这里写的第二组测试用例,当 name 结束以后,如果 typed 还有多余的不同的字符,这种情况要输出 false 的。具体见 test 文件里面的第二组,第三组,第四组测试用例。 diff --git a/website/content/ChapterFour/0925.Long-Pressed-Name.md b/website/content/ChapterFour/0925.Long-Pressed-Name.md index 4483d5919..fb33cbd99 100644 --- a/website/content/ChapterFour/0925.Long-Pressed-Name.md +++ b/website/content/ChapterFour/0925.Long-Pressed-Name.md @@ -61,8 +61,8 @@ Explanation: It's not necessary to long press any character. ## 解题思路 -这一题也可以借助滑动窗口的思想。2 个字符串一起比较,如果遇到有相同的字符串,窗口继续往后滑动。直到遇到了第一个不同的字符,如果遇到两个字符串不相等的情况,可以直接返回 false。具体实现见代码。 - +- 这一题也可以借助滑动窗口的思想。2 个字符串一起比较,如果遇到有相同的字符串,窗口继续往后滑动。直到遇到了第一个不同的字符,如果遇到两个字符串不相等的情况,可以直接返回 false。具体实现见代码。 +- 这一题的测试用例修改过一次,需要注意我这里写的第二组测试用例,当 name 结束以后,如果 typed 还有多余的不同的字符,这种情况要输出 false 的。具体见 test 文件里面的第二组,第三组,第四组测试用例。 @@ -88,22 +88,20 @@ func isLongPressedName(name string, typed string) bool { if (len(name) == 0 && len(typed) != 0) || (len(name) != 0 && len(typed) == 0) { return false } - - j := 0 - for i := 0; i < len(name); i++ { - if j < len(typed) && name[i] == typed[j] { + i, j := 0, 0 + for i < len(name) && j < len(typed) { + if name[i] != typed[j] { + return false + } + for i < len(name) && j < len(typed) && name[i] == typed[j] { + i++ + j++ + } + for j < len(typed) && typed[j] == typed[j-1] { j++ - continue - } else { - if i > 0 && j < len(typed) && name[i-1] == typed[j] { - j++ - i-- - } else { - return false - } } } - return true + return i == len(name) && j == len(typed) } ``` \ No newline at end of file