題目:字符串中的第一個唯一字符
鏈接:
給定一個字符串?s
?,找到?它的第一個不重復(fù)的字符,并返回它的索引?。如果不存在,則返回?-1
?。
示例 1:
輸入: s = "leetcode"
輸出: 0
示例 2:
輸入: s = "loveleetcode"
輸出: 2
示例 3:
輸入: s = "aabb"
輸出: -1
提示:
1 <= s.length <= 105
s
?只包含小寫字母
思路:
1.先遍歷原來的字符串;
2.把對應(yīng)字符放到對應(yīng)的計數(shù)數(shù)組下然后++;
3.再遍歷一遍原來的字符串,然后看每個字符此時在計數(shù)器上出現(xiàn)的次數(shù),出現(xiàn)一次的返回。
解答:
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;
}
}
題目:HJ1?字符串最后一個單詞的長度
描述
計算字符串最后一個單詞的長度,單詞以空格隔開,字符串長度小于5000。(注:字符串末尾不以空格為結(jié)尾)
輸入描述:
輸入一行,代表要計算的字符串,非空,長度小于5000。
輸出描述:
輸出一個整數(shù),表示輸入字符串最后一個單詞的長度。
示例1
輸入:
hello nowcoder
輸出:
8
說明:
最后一個單詞為nowcoder,長度為8
思路:
1.輸入一串字符;
2.找出從后往前第一個的空格處;
3.截取空格處+1的字符串。并求其長度。
鏈接:
解答:
import java.util.Scanner;
// 注意類名必須為 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的區(qū)別
while (in.hasNextInt()) { // 注意 while 處理多個 case
String s=in.nextLine();
int k = s.lastIndexOf(' ');
String ret = s.substring(k+1);
System.out.println(ret.length());
}
}
}
?題目:驗證回文串
如果在將所有大寫字符轉(zhuǎn)換為小寫字符、并移除所有非字母數(shù)字字符之后,短語正著讀和反著讀都一樣。則可以認(rèn)為該短語是一個?回文串?。
字母和數(shù)字都屬于字母數(shù)字字符。
給你一個字符串?s
,如果它是?回文串?,返回?true
?;否則,返回?false
?。
示例 1:
輸入: s = "A man, a plan, a canal: Panama"
輸出:true
解釋:"amanaplanacanalpanama" 是回文串。
示例 2:
輸入:s = "race a car"
輸出:false
解釋:"raceacar" 不是回文串。
示例 3:
輸入:s = " "
輸出:true
解釋:在移除非字母數(shù)字字符之后,s 是一個空字符串 "" 。
由于空字符串正著反著讀都一樣,所以是回文串。
提示:
1 <= s.length <= 2 * 105
s
?僅由可打印的 ASCII 字符組成
思路:
1.先把字符串轉(zhuǎn)換成小寫
2.規(guī)定字符串的標(biāo)準(zhǔn),定義左右變量
3.兩個利用循環(huán),先遍歷找出范圍,左邊不能大于右邊,然后再循環(huán)把不符合標(biāo)準(zhǔn)的跳過
4.最后比較,如果不相等直接返回false,相等的繼續(xù)遍歷下一個,直到遍歷完成之后,都相等則返回true.
鏈接:
解答:
class Solution {
private boolean islegal(char ch){
if(ch>='a'&&ch<='z'||ch>='0'&&ch<='9'){
return true;
}
return false;
}
public boolean isPalindrome(String s) {
s=s.toLowerCase();
int left=0;
int right=s.length()-1;
while(left<right){
while(left<right&&!islegal(s.charAt(left))){
left++;
}
while(left<right&&!islegal(s.charAt(right))){
right--;
}
if(s.charAt(left)!=s.charAt(right)){
return false;
}else{
left++;
right--;
}
}
return true;
}
}