字符串相关问题

来源:互联网 发布:网络教育资源 编辑:程序博客网 时间:2024/05/29 16:16

1. 反转字符串

For example,
Given s = “the sky is blue”,
return “blue is sky the”.
注意空格的处理

public class Solution {    public String reverseWords(String s) {        if(s == null || s.length() == 0)            return s;        String[] stringArray = s.split(" ");        int len = stringArray.length;        StringBuilder sb = new StringBuilder();        for(int i = len-1; i >= 0; i--) {            if(!stringArray[i].isEmpty())                sb.append(stringArray[i]).append(" ");        }        return sb.length() == 0 ? "" : sb.substring(0, sb.length()-1);    }}

2.字符串的正则表达式

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

代码:

public class Solution {    public boolean match(char[] str, char[] pattern) {        if(str == null  || pattern == null)            return false;        return matchHelper(str, 0, pattern, 0);    }    public boolean matchHelper(char[] str, int strIndex, char[] pattern, int patternIndex) {        //同时结束 则返回true        if(strIndex == str.length && patternIndex == pattern.length)            return true;        //str为未结束  pattern结束        if(strIndex != str.length && patternIndex == pattern.length)            return false;        //str结束 pattern未结束        if(strIndex == str.length && patternIndex != pattern.length) {            //a*b*的问题            if(patternIndex < pattern.length-1 && pattern[patternIndex+1] == '*') {                return matchHelper(str, strIndex, pattern, patternIndex+2);            }            return false;        }        //str未结束 pattern未结束 pattern后一位为*        if(patternIndex < pattern.length-1 && pattern[patternIndex+1] == '*') {            //相等            if(str[strIndex] == pattern[patternIndex] || (pattern[patternIndex] == '.' && strIndex != str.length)) {                return matchHelper(str, strIndex+1, pattern, patternIndex+2) ||                    matchHelper(str, strIndex+1, pattern, patternIndex) ||                    matchHelper(str, strIndex, pattern, patternIndex+2);            }else {                return matchHelper(str, strIndex, pattern, patternIndex+2);            }        }        //如果相等 或者pattern为.        if(str[strIndex] == pattern[patternIndex] || (pattern[patternIndex] == '.' && strIndex != str.length)) {            return matchHelper(str, strIndex+1, pattern, patternIndex+1);        }        return false;    }}

3. 是否为数字

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

代码:

public class Solution {    public boolean isNumeric(char[] str) {        if(str == null || str.length == 0)            return false;        int len = str.length;        int index = 0;        int[] temp = new int[1];        //正负号        if(str[index] == '+' || str[index] == '-') {            index++;        }        //只有一个+ - 号 为false        if(index == len)            return false;        boolean isNum = true;        //先扫描数字        index = scanDigits(str, index, len);        if(index != len) {            //等于 .            if(str[index] == '.') {                index++;                index = scanDigits(str, index, len);                if(index != len && (str[index] == 'E' || str[index] == 'e')) {                    index++;                    isNum = isExp(str, index, len, temp);                    index = temp[0];                }            }else if(str[index] == 'e' || str[index] == 'E') {                index++;                isNum = isExp(str, index, len, temp);                index = temp[0];            }else                 isNum = false;        }        return isNum && index == len;    }    //扫描数字    public int scanDigits(char[] str, int index, int len) {        while(index != len && str[index] >= '0' && str[index] <= '9')            index++;        return index;    }    //判断指数    public boolean isExp(char[] str, int index, int len, int[] temp) {        if(index != len && (str[index]=='+' || str[index]== '-'))            index++;        //排除 +-   e        if(index == len)            return false;        index = scanDigits(str, index, len);        temp[0] = index;        return index == len ? true : false;    }}
0 0
原创粉丝点击