//实现Integer.valueOf(string)的功能classSolution{public:intStrToInt(string str){int n = str.size(), s =1;longlong res =0;if(!n)return0;if(str[0]=='-') s =-1;for(int i =(str[0]=='-'|| str[0]=='+')?1:0; i < n;++i){if(!('0'<= str[i]&& str[i]<='9'))return0;//过滤非合法字符
res =(res <<1)+(res <<3)+(str[i]&0xf);//res=res*10+str[i]-'0'; }return res * s;}};
字符串相加
//分析:给定两个字符串形式的非负整数,返回他们的和,也是个字符串//从后往前取单个字符,若有,转为数字;若无+0;
string addStrings(string num1, string num2){
string res ;int c =0,i = num1.size()-1,j = num2.size()-1;while(i >=0|| j >=0|| c >0){
c +=(i >=0)? num1[i--]-'0':0;//从后往前取字符,转为数字
c +=(j >=0)? num2[j--]-'0':0;//对应位置相加
res.push_back(c%10+'0');//转为字符插入res后,
c /=10;//进位}reverse(res.begin(),res.end());//从后往前取的,所以需要反转return res;}
反转字
符串
//位运算voidreverseString(vector<char>& s){constint half = s.size()/2;int end = s.size()-1;for(int i =0; i < half;++i,--end){
s[i]= s[i]^ s[end];
s[end]= s[end]^ s[i];
s[i]= s[i]^s[end];}}//双指针转换voidreverseString(vector<char>& s){int k=0,i=s.size()-1;while(k<i)swap(s[k++],s[i--]);}
字符串的第一个唯一字符
intfirstUniqChar(string s){int a[26]={0};for(int i =0; i < s.size(); i++){
a[s[i]-'a']++;}for(int i =0; i < s.size(); i++){if(a[s[i]-'a']==1)return i;}return-1;}
//解法1:暴力啊
string reverseStr(string s,int k){for(int i =0; i < s.size(); i +=2* k){if(i + k <= s.size())reverse(s.begin()+ i, s.begin()+ i + k);elsereverse(s.begin()+ i, s.end());}return s;}//解法2:迭代器实现
string reverseStr(string s,int k){
string::iterator it=s.begin();while(it+k<=s.end()){reverse(it,it+k);
it +=2*k;}reverse(it,s.end());//it跑出去和没有出去都不影响的。 return s;}