美文网首页剑指Offer
4.4 字符串(6)

4.4 字符串(6)

作者: coderjiege | 来源:发表于2017-12-30 12:32 被阅读7次

    方法

    • 往往涉及到字符串的操作,经常使用的方法是字符串两两拼接解决一些跟排序有关的问题。
    • 正则
      `boolean matches(String regex) : 正则匹配
    • 字符串方法
      String.valueOf(byte / short / char / int / long / float / double / char[ ])
      Double.valueOf(String / double)

    注意点

    • 暂无

    目录

    • 字符串不能表示数值
    • 替换空格
    • 把数组排成最小的数
    • 左旋转字符串
    • 翻转单词顺序列
    • 把字符串转换成整数

    字符串不能表示数值

    请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含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;
    }
    

    相关文章

      网友评论

        本文标题:4.4 字符串(6)

        本文链接:https://www.haomeiwen.com/subject/acbggxtx.html