前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Strings, Numbers, Math 11-20

Strings, Numbers, Math 11-20

原创
作者头像
luoheng
修改2022-09-02 12:05:37
3180
修改2022-09-02 12:05:37
举报
文章被收录于专栏:luoheng

本文为《Java Coding Problems》11-20题,问题涉及String, Number和Math (共39题)。

11. 判断回文串

问题:判断字符串是否是回文串(翻转后与自身相同)。

思路:将原字符串与翻转字符串做对比,使用StringBuilder翻转字符串。

代码如下:

代码语言:java
复制
public boolean isPalindrome(String str) {
    return str.equals(new StringBuilder(str).reverse().toString());
}

12. 移除重复字符

问题:将字符串中重复的字符去掉。

思路:使用distinct方法进行去重。

代码如下:

代码语言:java
复制
public String removeDuplicates(String str) {
    return Arrays.stream(str.split("")) // 切割成单个字符的字符串
            .distinct() // 去重
            .collect(Collectors.joining()); // 重新组合
}

13. 移除给定字符

问题:去掉字符串中某个给定字符。

思路:使用filter

代码如下:

代码语言:java
复制
public String removeChar(String str, char ch) {
    return str.chars()
            .filter(c -> c != ch) // 去掉字符
            .mapToObj(c -> String.valueOf((char) c)) // 转成字符串
            .collect(Collectors.joining()); // 连接字符串
}

上述代码之所以要将char转成String,是因为没找到好的方法将char流直接转成String,使用Collectors.joining()方法进行替代,因此要先将char转成String

14. 找到出现次数最多的字符

问题:找到字符串中出现次数最多的字符。

思路:流式处理。

代码如下:

代码语言:java
复制
public Pair<Character, Long> countMaxChar(String str) {
    return str.chars() // IntStream 流
            .mapToObj(c -> (char) c) // 转成字符
            .collect( // 统计计数,返回Map
                    Collectors.groupingBy(c -> c, Collectors.counting()))
            .entrySet() // 对map每个entry遍历
            .stream()
            .max(Map.Entry.comparingByValue()) // 计算最大值
            .map(p -> Pair.of(p.getKey(), p.getValue())) // 返回最大值
            .orElse(null); // 不存在
}

15. 按字符串长度排序字符串数组

问题:按字符串长度排序字符串数组。

思路:给sorted方法传递自定义比较方法。

代码如下:

代码语言:java
复制
public String[] sortByLen(String[] strs) {
    return Arrays.stream(strs)
            .sorted(Comparator.comparingInt(String::length))
            .toArray(String[]::new);
}

16. 判断子串

问题:判断给定字符串是否是另一个字符串的子串。

思路:使用contains方法。

代码如下:

代码语言:java
复制
public boolean isSubstr(String str, String substr) {
    return str.contains(substr);
}

17. 统计子串出现次数

问题:统计字符串中某个子串出现的次数。

思路:使用正则表达式查找。

代码如下:

代码语言:java
复制
public int countStr(String str, String substr) {
    // 使用 quote方法让substr中的元字符匹配自身
    Pattern pattern = Pattern.compile(Pattern.quote(substr));
    Matcher matcher = pattern.matcher(str);

    int position = 0;
    int count = 0;

    // 循环匹配
    while (matcher.find(position)) {
        // 11 在 111 中出现2次
        // 所以下次开始匹配位置是当前匹配位置 + 1
        position = matcher.start() + 1;
        ++count;
    }

    return count;
}

18. 判断异位词

问题:统计两个字符串是否是异位词(重排后两个字符串可以相等)。

思路:排序字符串然后判断是否相等。

代码如下:

代码语言:java
复制
public boolean isAnagram(String str1, String str2) {
    String sortedStr1 = str1.chars().sorted()
            .mapToObj(c -> String.valueOf((char) c))
            .collect(Collectors.joining());
    String sortedStr2 = str2.chars().sorted()
            .mapToObj(c -> String.valueOf((char) c))
            .collect(Collectors.joining());
    return sortedStr1.equals(sortedStr2);
}

19. 创建多行字符串

问题:创建多行字符串。

思路:JDK 13支持多行字符串模式,使用"""JDK 8可以使用String.join生成多行字符串。

代码如下:

代码语言:java
复制
// JDK 13
return """First Line
Second Line
""";
// JDK 8
return String.join(System.lineSeparator(),
        "First Line",
        "Second Line"
        );

20. 将字符串重复n次

问题:返回重复n次的字符串。

思路:JDK 11支持原生repeat方法,JDK 8可以使用流来生成。

代码如下:

代码语言:java
复制
public String repeat(String str, int n) {
    // JDK 11
    return str.repeat(n);
    // JDK 8
    return Stream.generate(() -> str)
            .limit(n)
            .collect(Collectors.joining());
}

参考资料:https://learning.oreilly.com/library/view/java-coding-problems/9781789801415/e1d580a7-79bb-4962-ade2-2ab67c7379e8.xhtml

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11. 判断回文串
  • 12. 移除重复字符
  • 13. 移除给定字符
  • 14. 找到出现次数最多的字符
  • 15. 按字符串长度排序字符串数组
  • 16. 判断子串
  • 17. 统计子串出现次数
  • 18. 判断异位词
  • 19. 创建多行字符串
  • 20. 将字符串重复n次
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档