目录
LeetCode—No.387—字符串中的第一个唯一字符
题目链接:字符串中的第一个唯一字符
题目描述
给定一个字符串s,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回1.
示例1:
输入:s = "leetcode"
返回:0
示例2:
输入:s = "loveleetcode"
返回:2
解题思路
创建一个长度为26的数组,以每个字母作为数组的下标,每个下标的值对应着该字母出现的次数,之后再遍历一次数组,找到第一个唯一字符并输出它的下标.
代码如下:
class Solution {
public int firstUniqChar(String s) {
int[] count = new int[26];
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
count[ch - 'a']++;
}
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(count[ch - 'a'] == 1){
return i;
}
}
return -1;
}
}
LeetCode—No.125—验证回文串
题目链接:验证回文串
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解题思路:
①首先将字符串中所有的大写字母转换为小写;
②定义一个私有方法,用来判断字符串中的每一个字符是否是字母或者数字;
③定义left为字符串最左端,定义right为字符串最右端,依次对比每一个字母和数字,对比过后,left++,right--,如果每一次都有s.charAt(left)== s.charAt(right),则返回true,否则返回false.
代码如下:
class Solution {
private boolean isCharAndNum(char ch){
if(ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'z'){
return true;
}
return false;
}
public boolean isPalindrome(String s) {
if(s == null || s == ""){
return true;
}
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while(left < right){
while(left < right && !isCharAndNum(s.charAt(left))){
left++;
}
while(left < right && !isCharAndNum(s.charAt(right))){
right--;
}
if(s.charAt(left) != s.charAt(right)){
return false;
}
left++;
right--;
}
return true;
}
}