- 无重复字符的最长子串
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
//哈希表
int lengthOfLongestSubstring(char* s) {
int len = strlen(s);
if (len==0)
return 0;
int max = 1; //用于记录最长无重复子串的长度
for (int i = 0; i < len; i++) { //外层循环确定子串的起始位置
int hash[256] = {0}; //用于记录字符是否出现过
for (int j = i; j < len; j++) { //内层循环遍历子串中的字符
if (hash[s[j]] == 0) { //没有出现过 则标记未出现
hash[s[j]] = 1;
if (j - i + 1 > max)
max = j - i + 1;
} else
break; //遇到已经出现过的字符 则跳出内层循环
}
}
return max;
}
- 判断字符串的两半是否相似
给你一个偶数长度的字符串 s
。将其拆分成长度相同的两半,前一半为 a
,后一半为 b
。
两个字符串 相似 的前提是它们都含有相同数目的元音('a'
,'e'
,'i'
,'o'
,'u'
,'A'
,'E'
,'I'
,'O'
,'U'
)。注意,s
可能同时含有大写和小写字母。
如果 a
和 b
相似,返回 true
;否则,返回 false
。
示例 1
输入:s = "book"
输出:true
解释:a = "bo" 且 b = "ok" 。a 中有 1 个元音,b 也有 1 个元音。所以,a 和 b 相似。
示例 2:
输入:s = "textbook"
输出:false
解释:a = "text" 且 b = "book" 。a 中有 1 个元音,b 中有 2 个元音。因此,a 和 b 不相似。
注意,元音 o 在 b 中出现两次,记为 2 个。
bool halvesAreAlike(char* s) {
int len=strlen(s);
int k=len/2;
int a=0;
int b=0;
for(int i=0;i<len/2;i++){
if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'||s[i]=='A'||s[i]=='E'||s[i]=='I'||s[i]=='O'||s[i]=='U')
a++;
}
printf("%d",a);
for(int j=k;j<len;j++){
if(s[j]=='a'||s[j]=='e'||s[j]=='i'||s[j]=='o'||s[j]=='u'||s[j]=='A'||s[j]=='E'||s[j]=='I'||s[j]=='O'||s[j]=='U')
b++;
}
printf("%d",b);
if(a==b) return true;
return false;
}
- 最后一个单词的长度
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。
int lengthOfLastWord(char * s){
int length = strlen(s);
int number=0;
for(int i=length-1;i>=0;i--){
if(s[i]!=' '){
number++;
}
if(s[i]==' '&&number>0){//若为空格 但number为0 说明倒数第一个单词还没找到
break;
}
}//逆向思维 从后往前找
return number;
}