【LeetCode】初级算法:字符串

题目可以在LeetCode查看

1. 反转字符串

用时:3ms

class Solution {
    public String reverseString(String s) {
	    // 用时:4ms
        // StringBuilder sb=new StringBuilder();
        // for(int i=s.length()-1;i>=0;--i){
        //     sb.append(s.charAt(i));
        // }
        // return sb.toString();
        
        return new StringBuilder(s).reverse().toString();
    }
}

2. 颠倒整数

用时:31ms

class Solution {
    public int reverse(int x) {
        boolean negative = x < 0;
        if (negative){
            x = -x;
        }
        long r = 0;
        while (x>0) {
            r = r * 10 + x % 10;
            x /= 10;
        }
        if (negative){
            r = -r;
        }
        if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE){
            return 0;
        }
        return (int)r;
    }
}

3. 字符串中的第一个唯一字符

用时:43ms

class Solution {
    public int firstUniqChar(String s) {
        int len=s.length();
        HashSet repeat=new HashSet<>();
        Character temp;
        boolean find=false;
        // 一个一个比较如果不重复则找到
        for(int i=0;i

4. 有效的字母异位词

用时:9ms

class Solution {
    public boolean isAnagram(String s, String t) {
        int len=s.length();
        if(len!=t.length()){
            return false;
        }
        // s有某字母则加1,t有则减一,最终都为0
        int[] words=new int[26];
        for(int i=0;i

5. 验证回文字符串

用时:31ms

class Solution {
    public boolean isPalindrome(String s) {
        // 只留下字母和数字
        s=s.replaceAll("[^a-zA-Z0-9]","");
        // 忽略大小写比较
        StringBuilder reverse=new StringBuilder(s).reverse();
        if(s.equalsIgnoreCase(reverse.toString())){
            return true;
        }
        return false;
    }
}

6. 字符串转整数(atoi)

用时:30ms

class Solution {
    public int myAtoi(String str) {
        int len=str.length();
        // 找到第一个非空格
        int i=0;
        while(i57){
            return 0;
        }
        
        // 正负号是末尾字符
        if(i==len){
            return 0;
        }
        
        // 将数字提取出来
        StringBuilder numStr=new StringBuilder();
        temp=str.charAt(i);
        while(temp>=48&&temp<=57){
            numStr.append(temp);
            if(++i>=len){
                break;
            }
            temp=str.charAt(i);
        }
        
        // 去除前面的0
        while(numStr.length()!=0&&numStr.charAt(0)=='0'){
            numStr.deleteCharAt(0);
        }
        
        // 如果为空串
        if(numStr.length()==0){
            return 0;
        }
        
        // 如果长度太长则直接返回最值
        if(numStr.length()>=11){
            if(neg){
                return Integer.MIN_VALUE;
            }
            return Integer.MAX_VALUE;
        }
        
        // 转为long
        Long num=Long.valueOf(numStr.toString());
        if(neg){
            num=-num;
        }
        if(numInteger.MAX_VALUE){
            return Integer.MAX_VALUE;
        }
        return num.intValue();
    }
}

7. 实现strStr()

用时:5ms

class Solution {
    public int strStr(String haystack, String needle) {
        int len1=haystack.length(),len2=needle.length();
        if(len2==0){
            return 0;
        }
        int i=0;
        char first=needle.charAt(0);
        // 直接比较子串
        while(i<=(len1-len2)){
            if(needle.equals(haystack.substring(i,len2+i))){
                return i;
            }
            ++i;
        }
        return -1;
    }
}

8. 数数并说

用时:5ms

class Solution {
    // 保存上一次的序列和n,用于直接从这一次开始
    public static StringBuilder startsb=new StringBuilder("1");
    public static int startn=1;

    public String countAndSay(int n) {
        StringBuilder presb=new StringBuilder("1");
        StringBuilder cursb=new StringBuilder();
        int i=0;
        // 如果n大于上一次的n,则可以直接从上一次开始
        if(n>=startn){
            presb.replace(0,presb.length(),startsb.toString());
            i=startn-1;
        }
        // 统计字符及其个数
        int count;
        char num;
        while(istartn){
            startsb.replace(0,startsb.length(),presb.toString());
            startn=n;
        }
        return presb.toString();
    }
}

9. 最长公共前缀

用时:9ms

class Solution {
    public String longestCommonPrefix(String[] strs) {
        int len1=strs.length;
        if(len1==0){
            return "";
        }
        int len2=strs[0].length();
        int count=0;
        char temp;
        boolean find;
        for(int i=0;i

你可能感兴趣的:(OJcode,LeetCode)