字符串练习(三)

文章介绍了使用Java编写的四个程序示例:生成扑克牌列表、检查有效括号配对、寻找无重复字符的最长子串以及计算字符串数组的最长公共前缀。最后一个是将整数转换为Excel列名称。
摘要由CSDN通过智能技术生成

1. Poker

定义两个数组,一个数组存储扑克牌花色,另一个数组存储扑克牌(A~K),输出52张扑克牌(除大小王)

public class Poker {
    定义两个数组,一个数组存储扑克牌花色,另一个数组存储扑克牌(A~K),输出52张扑克牌(除大小
    //王)
    ♥A、♥2...
    public static void main(String[] args) {
        String[] suits = {"♠", "♥", "♦", "♣"};
        String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        String card = "";
        for(int i = 0;i < suits.length;i++){
            for(int j =0;j < ranks.length;j++){
                card = suits[i] + ranks[j];
                System.out.println(card);

            }
        }
    }
}

2. 有效括号

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 注意空字符串可被认为是有效字符串。
import java.util.Scanner;

public class Bracket {
    //给定一个只包括 '(',')' 的字符串,判断字符串是否有效。\
    //有效字符串需满足:
    //左括号必须用相同类型的右括号闭合。
    //左括号必须以正确的顺序闭合。
    //注意空字符串可被认为是有效字符串。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入只只包括 '(',')' 的字符串");
        String str = sc.nextLine();
        boolean result = isValidString(str);
        if(result){
            System.out.println("合法");
        }else {
            System.out.println("不合法");

        }
    }

    public static boolean isValidString(String str) {
        if(str.length() % 2 != 0){
            return false;

        }
        int count = 0;

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == '(') {
                count++;
            } else if (c == ')') {
                count--;
                if (count < 0) {
                    return false;
                }
            }
        }

        return count == 0;
    }
}

3. 最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

public class Longest {
    public static void main(String[] args) {
        String str = "abcaefgh";
        String result = subString1(str);
        System.out.println(result.length());
    }

    public static String subString1(String str){
        String max = "";
        for (int start = 0; start < str.length(); start++) {
            String sub = str.substring(start, start + 1);
            for (int end = start + 1; end < str.length(); end++) {
                String current = str.substring(end, end + 1);

                if (sub.contains(current)){
                    if (sub.length() > max.length()) {
                        max = sub;
                    }
                    break;
                } else{
                    sub += current;
                }
            }
        }
        return max;
    }

}

4. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “” 。

package com.kfm.String.Test;/*
@CreatTime:2023-08-24   22:24
*/

public class Prefix {
    public static void main(String[] args) {
        //最长公共前缀
        //编写一个函数来查找字符串数组中的最长公共前缀。
        //如果不存在公共前缀,返回空字符串 "" 。

        String[] str = {"flower","flow","fight"};
        String reslt = fun(str);
        System.out.println(reslt);

    }

    public static String fun(String[] str){
        String s = "";
        if (str == null || str.length == 0) {
            return "";
        }
        int min = 0;
        for(int i =0;i < str.length;i++){
            if(i < str.length -1){
                if(str[i].length() < str[min].length()){
                    min = i;
                }

            }

        }
        String mi = str[min];
        count:for(int i = 0;i < str[min].length();i++){
            for(int j = 0;j < str.length;j++){
                if(!str[j].startsWith(mi)){
                    mi = mi.substring(0, mi.length()-1);
                    continue count;
                }
            }

            break;
        }
        return mi;
    }


}

5. Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

public class Excel {
    //给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
//    输入:columnNumber = 701
//输出:"ZY"
    public static void main(String[] args) {
        int columnNumber = 2147483647;
        String result = prefix(columnNumber);
        System.out.println(result);
    }

    public static String prefix(int columnNumber){
        StringBuilder sb = new StringBuilder();
        while (columnNumber > 0){
            //求出0-25
            int remainder = (columnNumber - 1) % 26;
            char digit = (char) ('A' + remainder);
            sb.append(digit);
            columnNumber = (columnNumber - 1) / 26;
        }
        //翻转字符
        sb.reverse();
        return sb.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值