(13)字符串查找

容易 字符串查找
18%
通过

字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数。你的任务是实现这个函数。

对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。

如果不存在,则返回 -1

您在真实的面试中是否遇到过这个题? 
Yes
样例

如果 source = "source" 和 target = "target",返回 -1

如果 source = "abcdabcdefg" 和 target = "bcd",返回 1

挑战

O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP)

class Solution {
    /**
     * Returns a index to the first occurrence of target in source,
     * or -1  if target is not part of source.
     * @param source string to be scanned.
     * @param target string containing the sequence of characters to match.
     */
    public static int strStr(String source, String target) {
        
        if(source==null || target==null)
            return -1;
        int lent = target.length();
        int lens = source.length();
        for(int i=0;i<lens-lent+1;i++)
    	{
        	String sou = source.substring(i, i+lent);
        	if(sou.compareTo(target)==0)
        	{
        		return i;
        	}
        }
        return -1;
    }
}



<think>我们正在讨论字符串查找指定元素的方法。根据用户的引用,他们提到了JSJava中的字符串查找方法。用户的需求是查找字符串查找指定元素的方法。我将综合不同编程语言中的字符串查找方法,重点放在Python上,因为之前的对话主要围绕Python字符串操作,但也会简要提及其他语言以供参考。 核心方法: 1. find() index()查找子串首次出现的位置,find()找不到返回-1,index()找不到抛出异常。 2. rfind() rindex():从右侧开始查找。 3. in 操作符:检查子串是否存在。 4. count():统计子串出现次数。 5. 正则表达式:复杂匹配。 我将按照以下结构组织回答: - 一、Python基础查找方法 - 二、进阶查找技巧(含正则) - 三、跨语言比较(JS/Java) - 四、实战应用场景 - 相关问题生成 注意:引用标记要自然,例如在提到JSJava的方法时引用[1][2]。 </think>### Python字符串查找方法详解 字符串查找是编程中的高频操作,Python 提供了多种高效方法,同时可参考 JS Java 的实现逻辑。以下是核心方法及其应用场景: --- #### 一、基础查找方法 1. **`find()` 与 `index()`** - **`find()`**:返回首次出现的索引(未找到返回 `-1`) ```python s = "今天是星期三" print(s.find("是")) # 2(索引位置)[^1] print(s.find("周四")) # -1(未找到) ``` - **`index()`**:功能类似但未找到时抛 `ValueError` ```python print(s.index("星期")) # 3 # print(s.index("周四")) # 触发 ValueError ``` **参数扩展**: ```python s.find("三", 4) # 从索引4开始查找 ``` 2. **`rfind()` 与 `rindex()`**(反向查找) ```python s = "apple,banana,apple" print(s.rfind("apple")) # 13(最后出现的索引)[^2] ``` --- #### 二、高效进阶方法 1. **`in` 运算符**(存在性检查) ```python if "星期三" in s: print("存在") # 执行此分支 ``` 2. **`count()`**(统计出现次数) ```python s.count("三") # 1(出现次数) ``` 3. **正则表达式**(复杂模式匹配) ```python import re pattern = re.compile(r"星期(\w)") match = pattern.search(s) if match: print(match.group(1)) # "三"(捕获组内容) ``` --- #### 三、跨语言实现对比 | **方法** | Python | JavaScript(参考[^1]) | Java(参考[^2]) | |------------------|----------------------|------------------------------|------------------------------| | **基础查找** | `find()`/`index()` | `indexOf()`/`search()` | `indexOf()` | | **反向查找** | `rfind()` | `lastIndexOf()` | `lastIndexOf()` | | **存在性检查** | `in` | `includes()` | `contains()` | | **正则匹配** | `re.search()` | `match()`/`test()` | `Pattern.matcher()` | > **关键差异**: > - Python 的 `find()` 返回 `-1` 更安全,Java/JS 的 `indexOf()` 同理 > - JS 的 `search()` 支持正则(类似 Python 的 `re.search()`)[^1] > - Java 需指定起始索引 `str.indexOf("三", fromIndex=4)` [^2] --- #### 四、实战应用场景 1. **日志关键词提取** ```python log = "ERROR: File not found; USER: admin" if "ERROR" in log: error_start = log.find("ERROR") print(log[error_start:].split(";")[0]) # "ERROR: File not found" ``` 2. **表单数据验证** ```python email = "user@domain.com" if "@" in email and email.find(".") > email.find("@"): print("邮箱格式有效") ``` 3. **多语言文本处理** ```python text = "文件名:report_2023.pdf(重要)" # 查找中文括号位置 start = text.find("(") end = text.find(")") print(text[start+1:end]) # "重要" ``` --- #### 完整示例:中英文混合查找 ```python s = "订单ID: A00123,状态:已完成" # 查找英文冒号后的内容 en_colon = s.find(":") # 查找中文冒号后的内容 zh_colon = s.find(":") print(s[en_colon+1:].split(",")[0].strip()) # "A00123" print(s[zh_colon+1:]) # "已完成" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值