自学内容网 自学内容网

【Java】String字符串经典编程题速通指南

引言

在 Java 编程中,String 类是最常见且重要的工具之一。字符串处理在面试中也屡见不鲜,许多经典问题都围绕字符串展开。本文将带你速通几道 Java 中关于字符串的经典编程题,从常见的题型到高效的解法,并深入探讨每道题背后的思路与实现细节,帮助你迅速掌握并提升字符串处理的能力。

1. 反转字符串

题目描述:
给定一个字符串,编写一个方法反转该字符串并返回。例如,输入 "hello",返回 "olleh"

解法思路:

  • 双指针法: 从头尾向中间交换字符。时间复杂度为 O(n)。
  • 使用内置方法: 利用 StringBuilderreverse() 方法。

代码实现:

public class ReverseString {
    public static String reverse(String s) {
        StringBuilder reversed = new StringBuilder(s);
        return reversed.reverse().toString();
    }

    public static void main(String[] args) {
        System.out.println(reverse("hello")); // 输出: olleh
    }
}

细节解析:

  • StringBuilder 是 Java 中处理可变字符串的常用工具,内部维护了可变字符数组,反转操作在时间上非常高效。
2. 检查字符串是否是回文

题目描述:
判断给定的字符串是否是回文。回文是指正反读都一样的字符串,例如 "radar" 是回文,而 "hello" 不是。

解法思路:

  • 双指针法: 一个指针从字符串的起始位置开始,另一个从末尾开始,逐步比较字符是否相等。

代码实现:

public class PalindromeCheck {
    public static boolean isPalindrome(String s) {
        int left = 0, right = s.length() - 1;
        while (left < right) {
            if (s.charAt(left) != s.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome("radar")); // 输出: true
        System.out.println(isPalindrome("hello")); // 输出: false
    }
}

细节解析:

  • 双指针法在回文问题中尤其高效,避免了对整个字符串的多余遍历,时间复杂度为 O(n),空间复杂度为 O(1)。
3. 统计字符出现次数

题目描述:
编写一个方法统计字符串中每个字符的出现次数,并返回结果。例如,输入 "hello",输出 {h=1, e=1, l=2, o=1}

解法思路:

  • 使用 HashMap 存储每个字符及其对应的计数。遍历字符串时,遇到字符则更新计数。

代码实现:

import java.util.HashMap;

public class CharacterCount {
    public static HashMap<Character, Integer> countCharacters(String s) {
        HashMap<Character, Integer> charCount = new HashMap<>();
        for (char c : s.toCharArray()) {
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }
        return charCount;
    }

    public static void main(String[] args) {
        System.out.println(countCharacters("hello"));
    }
}

细节解析:

  • HashMap 通过键值对存储字符及其出现次数,getOrDefault() 方法简化了逻辑。时间复杂度为 O(n),空间复杂度也为 O(n)。
4. 判断两个字符串是否由相同字符组成

题目描述:
给定两个字符串,判断它们是否由相同的字符组成,即每个字符的出现次数一致。例如,输入 "abc""bca",返回 true

解法思路:

  • 可以对两个字符串分别排序,然后逐个比较字符是否相同。
  • 也可以使用 HashMap 统计两个字符串中各字符的频次,判断频次是否一致。

代码实现:

import java.util.Arrays;

public class AnagramCheck {
    public static boolean areAnagrams(String s1, String s2) {
        if (s1.length() != s2.length()) {
            return false;
        }
        char[] s1Array = s1.toCharArray();
        char[] s2Array = s2.toCharArray();
        Arrays.sort(s1Array);
        Arrays.sort(s2Array);
        return Arrays.equals(s1Array, s2Array);
    }

    public static void main(String[] args) {
        System.out.println(areAnagrams("abc", "bca")); // 输出: true
        System.out.println(areAnagrams("abc", "def")); // 输出: false
    }
}

细节解析:

  • 通过排序解决异构词问题,时间复杂度为 O(n log n),使用 Arrays.equals() 方法判断数组是否相等简化了代码逻辑。
5. 找出第一个不重复的字符

题目描述:
给定一个字符串,找出其中第一个不重复的字符,并返回其索引。如果不存在,返回 -1。

解法思路:

  • 使用 HashMap 记录字符的出现次数,然后再次遍历字符串,找出第一个出现次数为 1 的字符。

代码实现:

import java.util.HashMap;

public class FirstUniqueChar {
    public static int firstUniqChar(String s) {
        HashMap<Character, Integer> countMap = new HashMap<>();
        for (char c : s.toCharArray()) {
            countMap.put(c, countMap.getOrDefault(c, 0) + 1);
        }
        for (int i = 0; i < s.length(); i++) {
            if (countMap.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(firstUniqChar("leetcode")); // 输出: 0
        System.out.println(firstUniqChar("loveleetcode")); // 输出: 2
    }
}

细节解析:

  • 双遍历方案,通过 HashMap 存储字符的频率,第一次遍历用于统计频次,第二次遍历则用于查找不重复字符。时间复杂度为 O(n),空间复杂度为 O(n)。
结语

这些经典的字符串编程题目在 Java 开发中极具代表性,理解它们的解法不仅能帮助你在面试中脱颖而出,还能在实际开发中快速处理字符串问题。每道题目背后都有多种解法,熟悉常见的优化思路和核心技巧,将让你在编程中事半功倍。

感谢大家的支持和关注 下面是我的公众号如果能给大家带来帮助的话感谢关注


原文地址:https://blog.csdn.net/m0_61118741/article/details/142500434

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!