剑指Offer

4.4 字符串(6)

2017-12-30  本文已影响7人  coderjiege

方法


注意点


目录


字符串不能表示数值

请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配

public boolean match(char[] str, char[] pattern) {
    return String.valueOf(str).matches(String.valueOf(pattern));
}

替换空格

题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

public String replaceSpace(StringBuffer str) {
    return str.toString().replaceAll(" ", "%20");
}

把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

public String PrintMinNumber(int [] numbers) {
    // 比较数字a、b组合起来数字大小的方法是,ab和ba拼接,小的那个就是最小组合方式
    for (int i = 0; i < numbers.length; i++) {
        for (int j = i + 1; j < numbers.length; j++) {
            int a = Integer.valueOf(numbers[i] + "" + numbers[j]);
            int b = Integer.valueOf(numbers[j] + "" + numbers[i]);
            if (b < a) {
                int temp = numbers[j];
                numbers[j] = numbers[i];
                numbers[i] = temp;
            }
        }
    }
    String str = "";
    for (int i = 0; i < numbers.length; i++) {
        str += numbers[i];
    }
    return str;
}

左旋转字符串

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

public String LeftRotateString(String str,int n) {
    if (str == null) return null;
    int len = str.length();
    str += str;
    return len == 0 ? "" : str.substring(n % len, len + n % len);
}

翻转单词顺序列

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

public String ReverseSentence(String str) {
    if (str == null || str.trim().equals("")) {
        return str;
    }
    String[] arr = str.split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i = arr.length - 1; i >= 0; i--) {
        sb.append(arr[i]);
        if (i > 0)  sb.append(" ");
    }
    return sb.toString();
}

把字符串转换成整数

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0

public int StrToInt(String str) {
    if (str == null || str.length() == 0) {
        return 0;
    }
    boolean isValid = str.matches("[+-]?[1-9]+[0-9]*");
    if (!isValid) return 0;
    char[] arr = str.toCharArray();
    boolean minus = false;
    if (arr[0] == '-') minus = true;
    int ans = 0;
    for (int i = 0; i < arr.length; i++) {
        if (i == 0 && (arr[i] == '+' || arr[i] == '-')) {
            continue;
        }
        ans = ans * 10 + (arr[i] - '0');
    }
    return minus ? -ans : ans;
}

上一篇下一篇

猜你喜欢

热点阅读