算法题目---字符串

(一).介绍

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

(二).具体题目

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();
    }

}
相关推荐
运行时记录17 小时前
prompt-optimizer skill
算法
万法若空17 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
退休倒计时18 小时前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
学逆向的18 小时前
汇编——内存
开发语言·汇编·算法·网络安全
tachibana218 小时前
hot100 翻转二叉树(226)
java·数据结构·算法·leetcode
生戎马19 小时前
高光谱拼接算法(七)USAC
算法
PhotonixBay19 小时前
共聚焦成像核心原理:针孔、PSF与三维形貌测量技术
人工智能·测试工具·算法
来一碗刘肉面20 小时前
C++中的引用语法
c++·算法
Black蜡笔小新20 小时前
自动化AI算法训练服务器DLTM零代码私有化赋能智慧农业用AI智能视觉守护万亩良田
人工智能·算法·自动化
Tisfy21 小时前
LeetCode 1288.删除被覆盖区间:排序(非二重循环暴力)
算法·leetcode·题解·排序