Java基础十五(字符串)

1. Poker

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

♥A、♥2...
public class Poke {
    public static void poker() {
        String[] pokerNumbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        String[] suits = {"♠", "♥", "♦", "♣"};
        for (int i = 0; i < pokerNumbers.length; i++) {
            for (int j = 0; j < suits.length; j++) {
                System.out.print(suits[j] + pokerNumbers[i] + '\t');
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        poker();
    }
}

2. 有效括号

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 注意空字符串可被认为是有效字符串。
public class ValidParentheses {
    public static boolean isValid(String str) {
        StringBuilder sb = new StringBuilder(str);
        // 判断是否为空
        if (sb.isEmpty()) {
            return true;
        }
        // 记录左括号数量
        int countLeft = 0;
        for (int i = 0; i < sb.length(); i++) {
            if (sb.charAt(i) == '(') {
                countLeft ++;
            } else {
                countLeft --;
            }
            if (countLeft < 0) {
                return false;
            }
        }
        // 判断左括号和右括号是否相等
        if (countLeft == 0) {
            return true;
        } else {
            return false;
        }
    }

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

3. 最长子串

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

public class MaxSubString2 {

    /**
     * 寻找最长子串
     * @param str
     * @return int
     */
    private static int maxSubStr(String str) {
        String string = "";
        int max = 0;
        int starts = 0;
        for (int i = 1; i < str.length(); i++) {
            string = str.substring(starts, i);
            if (string.contains("" + str.charAt(i))) {
                max = Math.max(max, string.length());
                // 找下一个子串的开始坐标
                starts = str.indexOf(str.charAt(i), starts) + 1;
            } else if (i == str.length() - 1) {  // 不存在并且是最后一个
                string = str.substring(starts);
                max = Math.max(max, string.length());
            }
        }
        return max;
    }

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

4. 最长公共前缀

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

public class MaxCommonPrefix {
    public static String maxCom(String[] strings) {
        String str = "";
        int num = 0;
        while (num < strings[0].length()) {
            for (int i = 0; i < strings.length; i++) {
                if (!strings[i].startsWith(str)) {
                    return str.substring(0,str.length() - 1);
                }
            }
            str += strings[0].charAt(num);
            num ++;
        }
        return str;
    }
    public static void main(String[] args) {
        String[] strs = {"f1lower","1flow","flight"};
        System.out.println(maxCom(strs));
    }
}

5. Excel表列名称

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

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
public class ExcelListName {
    public static String columnName(int columnNumber) {
        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder sb = new StringBuilder();

        while (columnNumber > 0) {
            // 在将数字转换为对应的列名称时,需要注意的是 Excel 表中的列名是从 "A" 开始计数的,而不是从 "0" 开始计数的。
            int remainder = (columnNumber - 1) % 26;
            sb.insert(0, alphabet.charAt(remainder));
            columnNumber = (columnNumber - 1) / 26;
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(columnName(2147483647));
    }
}

你可能感兴趣的:(Java,java,开发语言,算法)