9. 回文数
题目描述及官方解读: https://leetcode-cn.com/problems/palindrome-number/solution/
一开始只想到转为字符串再判断
class Solution {
public boolean isPalindrome(int x) {
if(x==0){
return true;
}
String a = String.valueOf(x);
if (a.equals(f(a))) {
return true;
} else {
return false;
}
}
public static String f(String s) {
if(s==null||s.length()<=1){
return s;
}
return f(s.substring(1)) + s.charAt(0);
}
}
344. 反转字符串
题目描述: https://leetcode-cn.com/problems/reverse-string/
编写一个函数,其作用是将输入的字符串反转过来。
示例 1:
输入: "hello"
输出: "olleh"
示例 2:
输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
此题实现思路总体分两种,递归与从后往前遍历
思路1:遍历
class Solution {
public String reverseString(String s) {
if (s == null||s.length()==0) {
return "";
}
char[] c = new char[s.length()];
int f = 0;
for (int i = s.length() - 1; i > -1; i--) {
c[f++] = s.charAt(i);
}
return new String(c);
}
}
可使用charAt() 或 将字符串转化为字符数组。
思路2:递归
这里要注意递归的终止条件,当仅剩余一个字符时,返回该字符本身
public static String reverseString(String s) {
if(s==null||s.length()<=1){
return s;
}
return reverseString(s.substring(1)) + s.charAt(0);
}
387. 字符串中的第一个唯一字符
题目描述:https://leetcode-cn.com/problems/first-unique-character-in-a-string/
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
思路1:使用Hashmap
遍历第一遍:将字符作为Key,value用来记录是否出现过。
遍历第二遍:输出第一个未出现第二遍的字符
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer> map = new HashMap<>();
for(Character c:s.toCharArray()){
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}else {
map.put(c,1);
}
}
for(int i=0;i<s.length();i++){
if(map.get(s.charAt(i))==1){
return i;
}
}
return -1;
}
}
思路2:由于范围是小写字母,可以用数组来记录每个字符的出现次数
也是遍历两遍,一遍记录,一遍用来输出第一个出现一次的字符。
class Solution {
public int firstUniqChar(String s) {
int[] word = new int[26];
for(int i = 0; i < s.length(); i++){
word[s.charAt(i)-'a']++;
}
for(int i = 0; i < s.length(); i++){
if(word[s.charAt(i)-'a']==1)
return i;
}
return -1;
}
}