算法题目---字符串

(一).介绍

字符串的算法题目,都是和别的算法结合来去出题的,例如,模拟,高精度加减等等

(二).具体题目

1.最长公共前缀

14. 最长公共前缀 - 力扣(LeetCode)

解法:模拟

java 复制代码
class Solution {
    public String longestCommonPrefix(String[] strs) {
        int len=strs.length;
        int len0=strs[0].length();  //以第一个字符串的长度为标准
        for (int i = 0; i < len0; i++) {
            char ch=strs[0].charAt(i);  //以第一个字符串的第i个字符为标准
            for (int j = 0; j < len; j++) {
                if (i==strs[j].length()||strs[j].charAt(i)!=ch){
                    return strs[0].substring(0,i);
                }
            }
        }
        return strs[0];
    }
}

2.最长回文子串

5. 最长回文子串 - 力扣(LeetCode)

解法:中心扩展算法

java 复制代码
class Solution {
    public String longestPalindrome(String s){
        int begin=0; //记录开始位置
        int len=0;   //记录最长回文串的长度
        int lenS=s.length();
        for (int i = 0; i < lenS; i++) {  //固定所有的中间点
            //扩展奇数长度的子串
            int left=i;
            int right=i;
            while (left>=0 && right<lenS && s.charAt(left)==s.charAt(right)){
                left--;
                right++;
            }
            //取最长长度的回文子串
            if (right-left-1>len){   // 当执行到这里的时候,说明 s.charAt(left)和 s.charAt(right) 不相等了,那么相等的部分为 left+1  和  right-1
                begin=left+1;
                len=right-left-1;
            }

            //扩展偶数长度的子串
            left=i;
            right=i+1;
            while (left>=0 && right<lenS &&s.charAt(left)==s.charAt(right)){
                left--;
                right++;
            }
            if (right-left-1>len){
                begin=left+1;
                len=right-left-1;
            }
        }
        return s.substring(begin,begin+len);
    }
}

3.二进制求和

67. 二进制求和 - 力扣(LeetCode)

解法:模拟列竖式计算

java 复制代码
class Solution {
    public String addBinary(String a, String b){
        StringBuilder stringBuilder=new StringBuilder();
        int cur1=a.length()-1;
        int cur2=b.length()-1;
        int t=0;  //表示进位
        while (cur1>=0||cur2>=0){
            if (cur1>=0){
                int value_A = a.charAt(cur1)-'0';
                t+=value_A;
                cur1--;
            }
            if (cur2>=0){
                int value_B=b.charAt(cur2)-'0';
                t+=value_B;
                cur2--;
            }
            stringBuilder.append(t%2);  //由于是逢2进1,所以要%2
            t/=2;
        }
        if (t==1){  //处理特殊情况
            stringBuilder.append("1");
        }
        stringBuilder.reverse();  //由于添加的时候是正着添加的,所以要进行逆序
        return stringBuilder.toString();
    }
}

4.字符串相乘

43. 字符串相乘 - 力扣(LeetCode)

解法:模拟

java 复制代码
class Solution {
    public String multiply(String num1, String num2){
        //1.优先处理前导零
        if ((num1.length()==1&&num1.charAt(0)=='0')||(num2.length()==1&&num2.charAt(0)=='0')){
            return "0";
        }
        //2.进行无进位相加
        char[] n1=new StringBuilder(num1).reverse().toString().toCharArray();
        char[] n2=new StringBuilder(num2).reverse().toString().toCharArray();
        int len1=n1.length;
        int len2=n2.length;
        int[] temp=new int[len1+len2-1];
        for (int i = 0; i < len1; i++) {
            int v1=n1[i]-'0';
            for (int j = 0; j < len2; j++) {
                int v2=n2[j]-'0';
                temp[i+j]+=v1*v2;
            }
        }
        //3.处理进位
        StringBuilder stringBuilder=new StringBuilder();
        int t=0; //表示进位
        for (int i = 0; i < temp.length; i++) {
            t+=temp[i];
            stringBuilder.append(t%10);
            t/=10;
        }
        //4.处理特殊情况
        if (t!=0){
            stringBuilder.append(t);
        }
        return stringBuilder.reverse().toString();
    }

}
相关推荐
果壳science6 小时前
《自然本源》如何实现狭义相对论的代数化
笔记·算法·几何学
302wanger7 小时前
分享一个工作习惯:整点看即时消息
算法
洋不写bug8 小时前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
牧羊人.3338 小时前
动手学深度学习 03 | 卷积神经网络实现手写数字识别
人工智能·深度学习·神经网络·算法·cnn
AgentMaster9 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
liliangcsdn9 小时前
最终留出样本/样本外测试集-holdout解读
算法
爱敲代码的小黄9 小时前
机器学习入门:从数据、训练到业务决策
算法
数据知道10 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法
haon112210 小时前
树模型在信贷风控怎么用——从决策树到 XGBoost
大数据·人工智能·算法·决策树·机器学习·数据挖掘
wordbaby10 小时前
BM25 是什么?手把手拆解搜索引擎的核心算法
人工智能·算法