LeetCode刷题之字符串
第一题:反转字符串
示例:
输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]
来源:点击这里
答案:简单
void reverseString(char* s, int sSize){ int j=sSize-1; for (int i=0;i<sSize/2;){ char temp = s[i]; s[i] = s[j]; s[j] = temp; i++; j--; } }
第二题:字符串中的第一个唯一字符
示例:
s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.
来源:点击这里
答案:跟出现次数有关的,不要犹豫,直接hash
int firstUniqChar(char * s){ int len = strlen(s); int i = 0; if(len == 0) return -1; int table[26] = {0}; for( i = 0; i < len;i++) table[s[i] - 'a']++; for(i = 0; i < len;i++){ if(table[s[i] - 'a'] == 1) return i; } return -1; }
第三题:有效的字母异位词
示例:
输入: s = "anagram", t = "nagaram" 输出: true
来源:点击这里
答案:异位词的意思是字母出现次数是一样的,但是出现的顺序不一样
这道题超级简单,我才用的是暴力求解的方法。先对字符串进行排序。所以采用的C++使用sort()函数。还可以采用hash.
class Solution { public: bool isAnagram(string s, string t) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); if (s.size() != t.size()) return false; for (int i=0;i<s.size();i++){ if (s[i] != t[i]) return false; } return true; } };
第四题:验证回文字符串
示例:
输入: "A man, a plan, a canal: Panama" 输出: true
来源:点击这里
答案:这道题简单,采用暴力求解,使用C++函数toupper和isalnum来处理与判断字符串
class Solution { public: bool isPalindrome(string s) { for ( int i = 0,j = s.size()-1;i<j;i++,j--){ while (!isalnum(s[i])&&i<j) i++; while (!isalnum(s[j])&&i<j) j--; if(toupper(s[i]) != toupper(s[j])) return false; } return true; } };
第五题:整数反转
示例:
输入: 120 输出: 21
来源:点击这里
答案:
class Solution { public: int reverse(long int x) { int res=0; //res表示结果 while(x!=0) { if(res>INT_MAX / 10) return 0; if(res<INT_MIN / 10) return 0; //判断是否将要发生越界 res*=10; res=res+x%10; x=x/10; } return res; } };
第六题:字符串转换整数 (atoi)
示例:详细示例需要看力扣官网
输入: "42" 输出: 42
来源:点击这里
答案:该题属于中等难度,独立解决比较困难,答案参考于力扣官网
class Solution { public: int myAtoi(string str) { int i=0,sign=1,result=0; if(str==" ") return 0; for(i=0;i<str.length();++i){ if(str[i]!=' ') break; } if(str[i]=='-'){ sign=-1; i++; }else if(str[i]=='+') i++; if(i==str.length()||str[i]<'0'||str[i]>'9') return 0; while(i<str.length()&&str[i]>='0'&&str[i]<='9'){ if(result>INT_MAX/10||(result==INT_MAX/10&&(str[i]-'0')>INT_MAX%10)) return INT_MAX; if(result<INT_MIN/10||(result==INT_MIN/10&&(str[i]-'0')>-(INT_MIN%10))) return INT_MIN; result=result*10+sign*(str[i]-'0'); i++; } return result; } };