您的位置:首页 > 教育 > 培训 > 动漫设计与制作属于哪个大类_网站建设中企_seo是什么意思?_seo需要掌握哪些技术

动漫设计与制作属于哪个大类_网站建设中企_seo是什么意思?_seo需要掌握哪些技术

2025/2/26 1:09:53 来源:https://blog.csdn.net/m0_74494481/article/details/145533594  浏览:    关键词:动漫设计与制作属于哪个大类_网站建设中企_seo是什么意思?_seo需要掌握哪些技术
动漫设计与制作属于哪个大类_网站建设中企_seo是什么意思?_seo需要掌握哪些技术

字符串

  • 原理
  • 相关例题
    • [14. 最长公共前缀](https://leetcode.cn/problems/longest-common-prefix/description/)
    • [43. 字符串相乘](https://leetcode.cn/problems/multiply-strings/description/)
    • [67. 二进制求和](https://leetcode.cn/problems/add-binary/description/)
    • [5. 最长回文子串](https://leetcode.cn/problems/longest-palindromic-substring/description/)

原理

字符串相关的匹配算法有BF算法和KMP算法,自行学习。

相关例题

14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

所有字符串同时从前往后比较即可。

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {if(1==strs.size()){return strs[0];}string s;int i=0;while(1){int j=0;while(j+1<strs.size()){if(i==strs[j].size()||i==strs[j+1].size()||strs[j][i]!=strs[j+1][i]){return s;}++j;}s+=strs[0][i++];}return s;}
};

43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

模拟两数相乘即可,需要注意结果可能存在前导零需要去除

class Solution {
public:string multiply(string num1, string num2) {if("0"==num1||"0"==num2){return "0";}string num;int pos1=num1.size();int pos=0;while(pos1--){int pos2=num2.size();int add=0;string tmp;while(pos2--){int mul=(num1[pos1]-'0')*(num2[pos2]-'0')+add;add=mul/10;mul%=10;tmp+=to_string(mul);}if(add){tmp+=to_string(add);}cout<<tmp<<endl;if(num.empty()){num=tmp;}else{int i=0;int j=pos;int c=0;while(j<num.size()){int sum=(num[j]-'0')+(tmp[i]-'0')+c;c=sum/10;sum%=10;num[j]=sum+'0';++j;++i;}while(i<tmp.size()){int sum=(tmp[i]-'0')+c;c=sum/10;sum%=10;num+=to_string(sum);++i;}if(c){num+=to_string(c);}}++pos;}int i=0;int j=num.size()-1;while(i<j){swap(num[i],num[j]);++i;--j;}return num;}
};

67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和

直接模拟两数相加即可

class Solution {
public:string addBinary(string a, string b) {string ans;int carry=0;int pos1=a.size()-1;int pos2=b.size()-1;while(pos1>=0&&pos2>=0){int tmp=carry+a[pos1--]+b[pos2--]-2*'0';ans+=to_string(tmp%2);carry=tmp/2;}while(pos1>=0){int tmp=carry+a[pos1--]-'0';ans+=to_string(tmp%2);carry=tmp/2;}while(pos2>=0){int tmp=carry+b[pos2--]-'0';ans+=to_string(tmp%2);carry=tmp/2;}if(carry){ans+=to_string(carry);}for(pos1=0,pos2=ans.size()-1;pos1<pos2;++pos1,--pos2){swap(ans[pos1],ans[pos2]);}return ans;}
};

5. 最长回文子串

给你一个字符串 s,找到 s 中最长的
回文子串。

选定一个点作为回文串中心,向两边延申直到不是回文串为止,需要考虑回文串长度为奇数和偶数两种情况。

class Solution {
public:string longestPalindrome(string s) {string ans;int i=0;for(i=0;i<s.size();++i){int left=0;int right=0;//回文串长度为奇数for(left=i-1,right=i+1;left>=0&&right<s.size()&&s[left]==s[right];--left,++right);if(ans.size()<right-left-1){ans=s.substr(left+1,right-left-1);}//回文串长度为偶数for(left=i-1,right=i;left>=0&&right<s.size()&&s[left]==s[right];--left,++right);if(ans.size()<right-left-1){ans=s.substr(left+1,right-left-1);}}return ans;}
};