
在 java 字符串处理中,string 类的 indexof 方法是一个非常强大的工具,它用于查找指定字符或子字符串在字符串中首次出现的位置。通过巧妙地结合其重载形式,我们可以实现判断一个字符是否在字符串中是“唯一”的功能,即该字符在首次出现后,是否还有其他出现。
String 类提供了多个 indexOf 方法的重载形式,其中与本教程最相关的是:
要判断一个字符 c 在字符串 s 中是否是唯一的(至少是其首次出现的位置),我们可以采用以下策略:
让我们分解这个用于查找第一个唯一字符的条件表达式:
假设我们正在遍历字符串 s,当前字符的索引是 i。
s.charAt(i): 这会获取字符串 s 在当前索引 i 处的字符。例如,如果 s = "leetcode" 且 i = 0,则 s.charAt(i) 为 'l'。
s.indexOf(s.charAt(i)): 这会查找当前字符 s.charAt(i) 在整个字符串 s 中第一次出现的索引。
s.indexOf(s.charAt(i)) + 1: 这是一个关键步骤。它计算出在当前字符 s.charAt(i) 第一次出现之后,下一个应该开始搜索的位置。
s.indexOf(s.charAt(i), s.indexOf(s.charAt(i)) + 1): 这是最核心的部分。它使用 indexOf(char, fromIndex) 的重载形式,再次搜索当前字符 s.charAt(i)。但这次搜索不是从字符串开头,而是从 s.charAt(i) 第一次出现位置的下一个位置 (s.indexOf(s.charAt(i)) + 1) 开始。
== -1: 最后,将上述搜索结果与 -1 进行比较。
以下是一个完整的 Java 方法,演示了如何使用上述逻辑查找字符串中第一个唯一字符的索引:
public class UniqueCharFinder {
/**
* 查找字符串中第一个不重复字符的索引。
* 如果所有字符都重复,则返回 -1。
*
* @param s 输入字符串
* @return 第一个不重复字符的索引,如果不存在则返回 -1
*/
private static int findFirstUniqueCharIndex(String s) {
// 遍历字符串中的每一个字符
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i); // 获取当前字符
// 关键判断:
// 1. s.indexOf(currentChar) 找到当前字符在字符串中第一次出现的索引。
// 2. s.indexOf(currentChar) + 1 确定从第一次出现位置的下一个位置开始搜索。
// 3. s.indexOf(currentChar, s.indexOf(currentChar) + 1) 从下一个位置开始搜索当前字符。
// 4. 如果搜索结果为 -1,说明在第一次出现之后,该字符没有再次出现,即为唯一字符。
if (s.indexOf(currentChar, s.indexOf(currentChar) + 1) == -1) {
return i; // 找到第一个唯一字符,返回其索引
}
}
return -1; // 遍历完所有字符,未找到唯一字符
}
public static void main(String[] args) {
String s1 = "leetcode";
System.out.println("字符串 \"" + s1 + "\" 中第一个唯一字符的索引是: " + findFirstUniqueCharIndex(s1)); // 输出 0 ('l')
String s2 = "loveleetcode";
System.out.println("字符串 \"" + s2 + "\" 中第一个唯一字符的索引是: " + findFirstUniqueCharIndex(s2)); // 输出 2 ('v')
String s3 = "aabb";
System.out.println("字符串 \"" + s3 + "\" 中第一个唯一字符的索引是: " + findFirstUniqueCharIndex(s3)); // 输出 -1
String s4 = "abcabc";
System.out.println("字符串 \"" + s4 + "\" 中第一个唯一字符的索引是: " + findFirstUniqueCharIndex(s4)); // 输出 -1
String s5 = "a";
System.out.println("字符串 \"" + s5 + "\" 中第一个唯一字符的索引是: " + findFirstUniqueCharIndex(s5)); // 输出 0 ('a')
}
}尽管存在性能上的考量,但通过 indexOf 方法的巧妙组合来判断字符唯一性,展示了 Java String API 的灵活性和表达力,对于理解字符串操作的底层逻辑非常有益。
以上就是使用 indexOf 方法查找字符串中第一个唯一字符的原理与实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号