语言: Java
参考资料: 代码随想录、ChatGPT3.5
28. 实现 strStr()
力扣题目链接(opens new window)
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2
示例 2: 输入: haystack = “aaaaa”, needle = “bba” 输出: -1
说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
public class Solution {public int strStr(String haystack, String needle) {// 注意Java中如何判断字符串是否为空if (needle.isEmpty()) {return 0;}for (int i = 0; i <= haystack.length() - needle.length(); i++) {// substring截取区间为左闭右开区间if (haystack.substring(i, i + needle.length()).equals(needle)) {return i;}}return -1;}public static void main(String[] args) {Solution solution = new Solution();System.out.println(solution.strStr("hello", "ll")); // Output: 2System.out.println(solution.strStr("aaaaa", "bba")); // Output: -1}
}
459.重复的子字符串
力扣题目链接(opens new window)
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
- 输入: “abab”
- 输出: True
- 解释: 可由子字符串 “ab” 重复两次构成。
示例 2:
- 输入: “aba”
- 输出: False
示例 3:
- 输入: “abcabcabcabc”
- 输出: True
- 解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)
public class Solution {public boolean repeatedSubstringPattern(String s) {int n = s.length();for (int i = 1; i <= n / 2; i++) {if (n % i == 0) {String sub = s.substring(0, i);StringBuilder sb = new StringBuilder();for (int j = 0; j < n / i; j++) {sb.append(sub);}if (sb.toString().equals(s)) {return true;}}}return false;}public static void main(String[] args) {Solution solution = new Solution();System.out.println(solution.repeatedSubstringPattern("abab")); // Output: trueSystem.out.println(solution.repeatedSubstringPattern("aba")); // Output: falseSystem.out.println(solution.repeatedSubstringPattern("abcabcabcabc")); // Output: true}
}